如何压缩具有 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
并且您决定将 B
、C
和 D
压缩到一个新的提交中 D'
[master] A---D'
\
[bugfix] B---C---D---1---2---3
请注意,提交 B
、C
和 D
仍保留在 bugfix
分支中。如果您只是将 bugfix
变基到 master
,Git 将尝试这样做:
[master] A---D'
\
[bugfix] B---C---D---1---2---3
但 B
、C
和 D
引入的更改已包含在 D'
中。你真正想要的结果是这样的:
[master] A---D'
\
[bugfix] 1---2---3
您可以使用 rebase
的 --onto
选项完成此操作:
git rebase --onto master D bugfix
D
应该是 bugfix
中的最新提交,在变基时应该 不 包含。
所以我有一个 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
并且您决定将 B
、C
和 D
压缩到一个新的提交中 D'
[master] A---D'
\
[bugfix] B---C---D---1---2---3
请注意,提交 B
、C
和 D
仍保留在 bugfix
分支中。如果您只是将 bugfix
变基到 master
,Git 将尝试这样做:
[master] A---D'
\
[bugfix] B---C---D---1---2---3
但 B
、C
和 D
引入的更改已包含在 D'
中。你真正想要的结果是这样的:
[master] A---D'
\
[bugfix] 1---2---3
您可以使用 rebase
的 --onto
选项完成此操作:
git rebase --onto master D bugfix
D
应该是 bugfix
中的最新提交,在变基时应该 不 包含。