git - 撤消 Git 中的 merge ,以便不存在来自其他分支的提交

标签 git github version-control branch branching-and-merging

我有两个分支:developmentbug_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 就足够了。

OPcase ,完整的命令是:

git rebase -p -i (b)

-p 允许保留 merge 提交。

关于git - 撤消 Git 中的 merge ,以便不存在来自其他分支的提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36532513/

相关文章:

github - CSS 属性在 github 中以红色突出显示

Github 提交,diff 不显示更改

git - 我可以从另一个分支添加对暂存区的更改吗?

java - 尝试使用 EGit 将 GIT 项目从 IntelliJ IDEA 迁移到 Eclipse?

git - 如何使用 GIT 集成在 Intellij 14 中设置 user.email 和 user.name?

c# - 从 git 中提取项目后,Unity 无法识别某些 .cs 文件

git - 在 git 中,如何在不 merge 的情况下将 MASTER 指针(分支)指向另一个提交?

C++ - 像git一样获取2个字符串的 "difference"

github - 将 README 更改为 Github 上的 Readme.md

c# - 为版本控制实现 ISerializable