在Git中撤消合并,以便不存在来自其他分支的提交

Ars*_*Ali 8 git version-control branch github branching-and-merging

我有两个分支:开发bug_fixes,我偶然在两到三周前在bug_fixes中合并了开发分支,并且从那时起就开始研究bug_fixes,并且我已经推送了bug_fixes中的更改.

现在,我需要取消合并开发分支.我想要一个没有提交形式开发分支的纯bug_fixes分支.通过谷歌搜索,我想出了以下场景:

1)恢复在bug_fixes分支中合并开发分支的提交,但它部分地完成了工作.来自开发分支的提交仍然可以在bug_fixes分支中看到,这是不需要的.

2)Rebase,并删除执行合并的提交,但它仍然具有第1点中描述的相同问题.bug_fixes分支仍包含来自开发分支的提交.

有没有办法可以删除合并提交,并且bug_fixes分支表单开发分支中的所有提交也会被删除?或者,这是不可能的?

Von*_*onC 5

如果您知道哪些提交来自开发分支(除了合并提交之外),您可以从最后一次错误修复提交中进行git rebase -i(交互式rebase):

 b--b--(B)--M--d--b--d--b--b (bugfix)
           /
    d--d--d  (devel)

git checkout bugfix
git rebase -i (B)
# drop M, d, and d

 b--b--(B)--b'--b'--b' (bugfix)

    d--d--d  (devel)
Run Code Online (Sandbox Code Playgroud)

更复杂的替代方案是a git filter-branch,但希望交互式rebase就足够了.

OP情况下,完整的命令是:

git rebase -p -i (b)
Run Code Online (Sandbox Code Playgroud)

-p 允许保留合并提交.