有人接受了他们不应该接受的拉取请求。现在我们合并了一堆损坏的代码。如何撤消拉取请求?我只是要在合并之前恢复对提交的更改,但我注意到它合并成一堆提交。所以现在有这个人在合并前几天的所有这些提交。你如何撤消这个?
这个问题有一个更好的答案,尽管我可以逐步分解:
奇怪的是缺少最简单的命令。大多数答案都有效,但撤消您刚刚所做的合并,这是一种简单而安全的方法:
git reset --merge ORIG_HEAD
refORIG_HEAD将指向合并之前的原始提交。
ORIG_HEAD
(该--merge选项与合并无关。它就像git reset --hard ORIG_HEAD,但更安全,因为它不会触及未提交的更改。)
--merge
git reset --hard ORIG_HEAD
您将需要像这样获取和签出最新的上游更改,例如:
git fetch upstream git checkout upstream/master -b revert/john/foo_and_bar
查看提交日志,您应该会发现类似以下内容:
commit b76a5f1f5d3b323679e466a1a1d5f93c8828b269 Merge: 9271e6e a507888 Author: Tim Tom <tim@tom.com> Date: Mon Apr 29 06:12:38 2013 -0700 Merge pull request #123 from john/foo_and_bar Add foo and bar commit a507888e9fcc9e08b658c0b25414d1aeb1eef45e Author: John Doe <john@doe.com> Date: Mon Apr 29 12:13:29 2013 +0000 Add bar commit 470ee0f407198057d5cb1d6427bb8371eab6157e Author: John Doe <john@doe.com> Date: Mon Apr 29 10:29:10 2013 +0000 Add foo
现在,您想要恢复整个拉取请求,并能够稍后取消恢复。为此,您需要获取 合并提交 的 ID 。
在上面的示例中, 合并提交 是上面写着 “Merged pull request #123…” 的提交。
这样做可以恢复这两个更改( “Add bar” 和 “Add foo” ),您最终将在一次提交中恢复整个拉取请求,您可以稍后取消恢复并保持更改历史记录干净:
git revert -m 1 b76a5f1f5d3b323679e466a1a1d5f93c8828b269