如何压缩具有 children 的分支上的提交

How do I squash commits on a branch that has children

所以我有一个 master 和一个继续它的 bugfix 分支的情况。我尝试压缩 master 上的一些提交,然后在其上重新定位错误修复,但我遇到了合并冲突。正确的方法是什么?我在本地工作,没有远程。

看起来像这样:

A - B - C - D - E - F [master]
                     \                 
                      G - H - I - J - K [bugfix]

我想压缩 A - B - C - D - E - F 并且仍然有错误修复继续压缩的主分支。

Jubob 关于共享历史的观点非常重要,因为强烈反对变基或压缩共享提交。

我假设您正在使用本地提交。

假设你是这样开始的:

[master] A---B---C---D
                      \
[bugfix]               1---2---3

并且您决定将 BCD 压缩到一个新的提交中 D'

[master] A---D'
          \
[bugfix]   B---C---D---1---2---3

请注意,提交 BCD 仍保留在 bugfix 分支中。如果您只是将 bugfix 变基到 master,Git 将尝试这样做:

[master] A---D'
              \
[bugfix]       B---C---D---1---2---3

BCD 引入的更改已包含在 D' 中。你真正想要的结果是这样的:

[master] A---D'
              \
[bugfix]       1---2---3

您可以使用 rebase--onto 选项完成此操作:

git rebase --onto master D bugfix

D 应该是 bugfix 中的最新提交,在变基时应该 包含。