我有两个分支:development 和 bug_fixes,我不小心 merge 了 development 分支到 bug_fixes两到三周前,从那时起我就一直致力于bug_fixes,并且我已经推送了bug_fixes中的更改。
现在,我需要取消 merge development 分支。我想要一个纯 bug_fixes 分支,没有来自 development 分支的提交。通过谷歌搜索,我想到了以下场景:
1) 还原将 development 分支 merge 到 bug_fixes 分支的提交,但它部分完成了工作。 development 分支的提交仍然可以在 bug_fixes 分支中看到,这不是必需的。
2) rebase ,并删除进行 merge 的提交,但它仍然存在第 1 点中描述的相同问题。bug_fixes 分支仍然包含来自 development 的提交分支机构。
有没有一种方法可以删除 merge 提交,所有来自 bug_fixes 分支形式 development 分支的提交也将被删除?或者,这是不可能的?
最佳答案
如果您知道哪些提交来自开发分支(除了 merge 提交),您可以执行 git rebase -i
(interactive 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)
更复杂的替代方案是 git filter-branch
,但希望交互式 rebase 就足够了。
git rebase -p -i (b)
-p
允许保留 merge 提交。
关于git - 撤消 Git 中的 merge ,以便不存在来自其他分支的提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36532513/