Git重置并恢复

时间:2015-06-03 16:57:17

标签: git merge reset revert

我不小心将错误的分支合并为主分支,并推送到原点。

问题是,我已经将masterbranch重置为使用git reset --hard xxx的commit-hash之前的最后一个,以及git push origin master --force的原点,但现在merge-commit始终存在。

更好的解决方案是使用git revert -m 1 <merge-commit>,但我没有:/

现在,从这个状态,我如何撤消合并清除历史? 也许,再次合并并还原!?

git history

2 个答案:

答案 0 :(得分:1)

你正在做什么

git log --oneline

查看合并前的提交

然后只是在合并之前恢复到该提交而不进行任何重置!再次推送到原点作为新提交。

还原意味着您的下一个快照将与合并之前的快照相同,但您的错误合并提交将保存在整体提交历史记录中 - 最好离开那里。尽可能避免git重置。

答案 1 :(得分:0)

这里没有必要回复任何东西。您几乎拥有正确的解决方案,但您重置为不正确的提交。解决这个问题的方法是运行:

git reset --hard <pre-merge commit hash>

这会将您的主分支重置为提交之前到合并。从这里开始,您可以运行:

git push origin master --force

像以前一样重置远程主分支。您运行的命令错误地将主分支指向合并提交哈希。

有了自己的背景知识,如果你看一下.git/refs/heads,你会看到一个与你的分支同名的文件列表。这些文件的内容只是它们指向的每个提交的哈希值。而这实际上是一个分支:对提交的引用。

当您运行git reset --hard <merge commit hash>时,您使主分支(这只是这个非常简单的参考文件)指向合并提交。通过在合并之前将其指向提交,您将更新此简单主分支引用以指向合并之前提交的哈希。