你如何恢复错误的混帐合并提交
因此,我的一个同事偶然做了合并,实际上只保留树的一侧。于是他开始合并,删除了合并引入的所有更改,然后进行合并。你如何恢复错误的混帐合并提交
这是一个简单的测试用例,我在测试回购上做过。这个回购有三个分支。 idx是意外合并的主题分支,master是主线。 dev仅仅是对-m如何恢复的测试,所以你可以忽略它。
我想要做的是恢复故障合并。因此,从主我尝试运行git revert -m 1 <sha1sum of faulty merge>
但随后的git与回应:
# On branch master
nothing to commit (working directory clean)
所以它实际上并没有创建一个还原提交该撤销合并。我相信会发生这种情况是因为合并实际上并未包含任何实际更改。
如果你想玩弄我的测试回购可以从here
下载这是一个git的bug,还是我失去了一些东西?
这里最好的经验法则是永远不会改变你的回购的公告后的历史。它真的把事情搞砸了。但我不认为这种情况可以避免它。
我认为这里有几个选择,但最简单的是做一个rebase。使用您的回购,这些都是我所使用的命令:
git rebase -i ead3646
然后,当交互shell出现,请卸下出现故障的整个行提交。保存,你应该清盘一个新的历史这样的:
* f0ab6d5 more normal work on dev
* ebb5103 idx commit
* ead3646 master change
* 582c38c dev commits
* f4b8bc6 initial commit
获取你们两个(及其他)回到同步是要采取一些分支,推,收发电子邮件和午餐买盘。
恢复同步并不是那么复杂。因为我从来没有在其他地方看过食谱,所以我写了一篇文章发布在这里:http:// *。com/questions/4084868 – 2010-11-03 07:09:48
我没有机会仔细阅读关于合并提交主题的'git revert'文档,但'-m'选项专门用于允许它在合并提交上进行操作。很明显,应该有一种方法来解决问题,而问题在于为什么它在这种情况下不起作用。 – Cascabel 2010-11-03 15:40:25
git文档说这是关于恢复合并:http://code.google.com/p/git-core/source/browse/Documentation/howto/revert-a-faulty-merge.txt 虽然这主要是关于恢复导致不良更改的合并,而不是恢复正确执行的合并。
基本上,还原合并将撤消数据更改,但不会更改历史(图形)。因此,预计恢复错误的合并不会产生任何效果。
解决这个问题的方法之一是再次进行合并,然后将结果合并到master中。在你的例子中,这可能是这样的:
git checkout -b temp/merge-fixup ead364653b601f48159bca5cb59d6a204a426168
git merge 2fce9bfe8f721c45ea1ed5f93176322cac60a1d9
git checkout master
git merge temp/merge-fixup
git branch -d temp/merge-fixup
现在,文档似乎已经消失。 – kojiro 2011-12-05 22:56:20
@kojiro:到目前为止,谷歌搜索“revert-a-faulty-merge.txt”可以产生大量的镜像。 – 2012-01-30 13:02:14
我不知道你为什么说“它实际上不创建合并提交” - 它不应该。您应该期待它创建一个正常的提交,这将反转合并提交的效果。 – Cascabel 2010-11-03 15:40:52
是的,对不起,这应该是说它实际上并没有创建一个恢复提交。 – 2010-11-03 23:51:44