这是我的情况。 在最初由master(M)创建的Branch X上,我做了一些提交。然后我打开了拉取请求,一位同事合并为主人。
然后,这位同事注意到了一些问题并创建了一个分支RB,他将合并恢复为主控。
与此同时,我在分支X中进行了另一次提交,该提交已被推送到原点。现在,如果我打开从X到master的pull请求,我会看到与我的新提交相关的合并冲突,但是在第一次合并之前所做的所有更改都会被合并恢复完全覆盖。
X--X--X--X
\
M-------M-----M
\ /
RB--RB
我该如何解决这个问题?
答案 0 :(得分:1)
您可以使用交互式rebase有选择地删除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
分支的头部。如果这恰好是合并提交,那么你很幸运,你可以避免交互式rebase。另一方面,如果其他人在合并之上做出了提交,那么你几乎可以选择交互式rebase。