如何恢复已经推送到远程分支的合并提交?
单独的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?