我们意外地将分支XYZ合并到DEV中并将其推送到原始仓库。这是使用--no-ff完成的,以创建单独的合并提交。一旦我意识到错误的合并,我做了一个git revert来创建一个恢复提交并将其推出。一切都很好,有很多欢乐......
直到我们尝试将XYZ合并到dev中。最初的混淆是由于在合并的dev分支上找不到添加到XYZ的大量文件。然后我意识到DEV分支有恢复提交,删除了由于合并而添加到XYZ以及随后到DEV的所有文件。
以下是简化的事件链:
$ git checkout dev
$ git branch xyz
$ git checkout xyz
$ git add files/foo.xyz
$ git commit -m "blargh"
这里发生意外合并:
$ git checkout dev
$ git merged xyz
$ git push origin dev
这是我试图挽救这一天:
$ git revert <SHA>
$ git push
恢复提交到位,每个人都很高兴
... more work happens ...
然后,现在终于合并xyz了:
$ git checkout xyz
$ ls files/foo.xyz
files/foo.xyz
$ git checkout dev
$ git merge xyz
$ ls files/foo.xyz
File not found
所以我的问题是:
a)什么是回滚提交的好方法,特别是如果它们被推送到其他回购? git revert似乎是正确的做法,但在合并问题之后我不再那么肯定......
b)假设git revert是正确的方法,如何处理上述合并场景?
PS:如果这个问题已经得到解答我很抱歉,但我真的不知道该搜索什么。如果有答案,请指导我。谢谢。答案 0 :(得分:14)
a)什么是回滚提交的好方法,特别是如果它们被推送到其他回购? git revert似乎是正确的做法,但在合并问题之后我不再那么肯定......
如果您已经与可能已经撤消该版本的其他开发人员共享了合并版本,那么git revert
合并提交是正确的做法是完全正确的。
b)假设git revert是正确的方法,如何处理上述合并场景?
这实际上是git中的经典问题。在this post from the Pro Git blog中建议(并且很好地解释)一个很好的(但非显而易见的!)处理这个问题的方法 - 简而言之,这个想法是在再次在分支中合并之前恢复恢复提交。
更新: Linux Torvalds还有一个another discussion of the same problem也可能会有所帮助。