这就是我的情况。 在最初从 master (M) 创建的分支 X 上,我做了一些提交。然后我打开了一个 pull 请求,一位同事 merge 到了 master。
然后,这位同事注意到了一些问题,并创建了一个分支 RB,并在该分支上将 merge 恢复到了 master。
与此同时,我在分支 X 中进行了另一次提交,该提交已被推送到原点。现在,如果我打开从 X 到 master 的 pull 请求,我会看到与我的新提交相关的 merge 冲突,但在第一次 merge 之前所做的所有更改都将被 merge 恢复完全覆盖。
X--X--X--X
\
M-------M-----M
\ /
RB--RB
我该如何解决这个问题?
最佳答案
您可以使用交互式 rebase 来有选择地删除 master
中的 merge 提交,这会恢复您的所有更改。
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
删除包含 merge 提交的行,留下以下内容:
pick jd832ng some commit
pick al83mld an earlier commit here
pick f2ui2nd another earlier commit
现在保存此文件,并完成 rebase 。您已从 master
分支中删除了 merge 提交。
注意:
如果来自分支 RB
的 merge 提交是 master
中的最新提交,那么您可以使用以下命令删除它:
git checkout master
git reset --hard HEAD~1
这将删除 master
分支的头部。如果这恰好是 merge 提交,那么您很幸运,可以避免交互式 rebase 。另一方面,如果其他人在 merge 之上进行了提交,那么您几乎可以选择交互式 rebase 。
关于git - 在 master 之前恢复与旧分支的 merge ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32047122/