在 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
分支的头部。如果这恰好是合并提交,那么你很幸运,你可以避免交互式变基。另一方面,如果其他人在合并之上进行了提交,那么您几乎只能选择交互式变基。
这是我的情况。 在最初从 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
分支的头部。如果这恰好是合并提交,那么你很幸运,你可以避免交互式变基。另一方面,如果其他人在合并之上进行了提交,那么您几乎只能选择交互式变基。