如何恢复已经推送到远程分支的合并提交?

单独的git revert <commit_hash>不起作用。 -m必须指定,我对此很困惑。

任何人都经历过这个?


-m选项指定父代号码 。 这是因为合并提交具有多个父代,并且Git不会自动知道哪个父代是主线,哪个父代是您想要取消合并的分支。

当你在git log的输出中查看合并提交时,你会看到它的父母列在以Merge开头的行上:

commit 8f937c683929b08379097828c8a04350b9b8e183
Merge: 8989ee0 7c6b236
Author: Ben James <ben@example.com>
Date:   Wed Aug 17 22:49:41 2011 +0100

Merge branch 'gh-pages'

Conflicts:
    README

在这种情况下, git revert 8f937c6 -m 1将会像8989ee0那样得到树,而git revert -m 2会像7c6b236那样恢复树。


这是一个完整的例子,希望它能帮助某人:

git revert -m 1 <commit-hash> 
git commit -m "Reverting the last commit which messed the repo."
git push -u origin master

其中<commit-hash>是您想要恢复的合并的提交哈希,并且正如此答案的解释中所述, -m 1表示您希望恢复到第一个父代的树之前合并。

git commit ...行实质上是提交你的修改,而第三行是通过推送你的修改到远程分支来公开你的修改。


Ben告诉过你如何恢复合并提交,但是你意识到这一点非常重要 “声明你永远不会希望合并引入的树更改。因此,以后的合并只会引入由承诺不是先前恢复合并的祖先,这可能是也可能不是你想要的。“ (git-merge man page)。

从手册页链接的文章/邮件列表消息详细介绍了涉及的机制和考虑因素。 只要确保你明白,如果你恢复合并提交,你不能只是稍后再次合并分支,并期望相同的更改回来。

链接地址: http://www.djcxy.com/p/1389.html

上一篇: How to revert a merge commit that's already pushed to remote branch?

下一篇: How can I push a specific commit to a remote, and not previous commits?