我不小心将错误的分支合并为主分支,并推送到原点。
问题是,我已经将masterbranch重置为使用git reset --hard xxx
的commit-hash之前的最后一个,以及git push origin master --force
的原点,但现在merge-commit始终存在。
更好的解决方案是使用git revert -m 1 <merge-commit>
,但我没有:/
现在,从这个状态,我如何撤消合并清除历史? 也许,再次合并并还原!?
答案 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>
时,您使主分支(这只是这个非常简单的参考文件)指向合并提交。通过在合并之前将其指向提交,您将更新此简单主分支引用以指向合并之前提交的哈希。