在 master 之前恢复与旧分支的合并的恢复

Reverting a revert of a merge with old branch ahead of master

这是我的情况。 在最初从 master (M) 创建的 Branch X 上,我做了一些提交。然后我开了一个pull request,一个同事合并到master。

然后,这位同事发现了一些问题,并创建了一个分支 RB,并在该分支上将合并还原为 master。

与此同时,我在分支 X 中进行了另一次提交,该提交已被推送到原点。现在,如果我打开一个从 X 到 master 的拉取请求,我会看到与我的新提交相关的合并冲突,但是我在第一次合并之前所做的所有更改都被合并还原完全覆盖。

X--X--X--X
       \
M-------M-----M
         \    /
         RB--RB

我该如何解决这个问题?

您可以使用交互式变基有选择地删除 master 中的合并提交,这会还原您的所有更改。

git checkout master
git rebase -i HEAD~4

这将提示您提交列表,如下所示:

pick jd832ng some commit
pick bd381nv merge commit branch RB into master
pick al83mld an earlier commit here
pick f2ui2nd another earlier commit

删除包含合并提交的行,留下以下内容:

pick jd832ng some commit
pick al83mld an earlier commit here
pick f2ui2nd another earlier commit

现在保存这个文件,完成rebase。您已从 master 分支中删除合并提交。

注:

如果来自分支 RB 的合并提交是 最近的 master 中的提交,那么您可以使用以下命令对其进行核对:

git checkout master
git reset --hard HEAD~1

这将删除 master 分支的头部。如果这恰好是合并提交,那么你很幸运,你可以避免交互式变基。另一方面,如果其他人在合并之上进行了提交,那么您几乎只能选择交互式变基。