小编典典

通过拉取请求撤消合并?

all

有人接受了他们不应该接受的拉取请求。现在我们合并了一堆损坏的代码。如何撤消拉取请求?我只是要在合并之前恢复对提交的更改,但我注意到它合并成一堆提交。所以现在有这个人在合并前几天的所有这些提交。你如何撤消这个?


阅读 68

收藏
2022-06-10

共1个答案

小编典典

这个问题有一个更好的答案,尽管我可以逐步分解:

奇怪的是缺少最简单的命令。大多数答案都有效,但撤消您刚刚所做的合并,这是一种简单而安全的方法

git reset --merge ORIG_HEAD

refORIG_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
2022-06-10