我正在尝试使用 git-rebase 提供的
autosquash
选项来压缩最后 3 个提交。我有以下病史:
* commit 78a7e4844fa32d2ef1bb7bd9b44c4a1b9551d31a (HEAD, new)
| Author: maxim koretskyi <[email protected]>
| Date: Fri Feb 20 10:29:48 2015 +0200
|
| squash! s3
|
* commit f25491cadc646baf14bd7e951245c6777230a1d7
| Author: maxim koretskyi <[email protected]>
| Date: Fri Feb 20 10:29:42 2015 +0200
|
| squash! s2
|
* commit b988237356ffb59752e49049d083c558373f9486
| Author: maxim koretskyi <[email protected]>
| Date: Fri Feb 20 10:29:24 2015 +0200
|
| squash! s1
|
* commit abbcdc833e5eaabe79681bd82087b4d7969e8599 (new1, ne, 9484)
| Author: maxim koretskyi <[email protected]>
| Date: Wed Feb 18 18:21:58 2015 +0200
|
| 3
所以我希望以
s1
为前缀的消息 s2
、s3
和 squash!
的提交被压缩。现在我发出以下命令:
$ git rebase -i abbcdc833 --autosquash
因此 git 打开一个文本编辑器,其中包含以下内容:
pick b988237 squash! s1
pick f25491c squash! s2
pick 78a7e48 squash! s3
但我希望它是这样的:
pick b988237 squash! s1
squash f25491c squash! s2
squash 78a7e48 squash! s3
我做错了什么?
来自文档,但强调我的:
当提交日志消息以“squash! ...”(或“fixup! ..."), 并且有一个提交的标题以相同的 ... 开头, 自动修改
的待办事项列表,以便提交 标记为压缩紧随要修改的提交之后, 并将移动的提交的操作从选择更改为挤压(或 修理)。忽略第一个之后的后续“fixup!”或“squash!”, 如果您使用rebase -i
引用了早期的修复/压缩。git commit --fixup/--squash
您的第一个
squash!
将 s3
作为其 ...
部分。因此,rebase 会查找以 s3
作为“标题”的提交(这在文档中从未定义,但它似乎意味着“单行描述”,即日志消息的第一行)。列表中没有此类提交。
继续第二个,我们发现同样的问题,第三个也是如此。
如果您的第一个提交(标题为
s1
)后面跟着一个标题为 squash! s1
的提交,则该特定提交将获得“挤压”一词。
(请注意,
git commit --fixup=<id>
或git commit --squash=<id>
将为您创建这种“相同标题”提交。“忽略后续”内容是因为您可以在工作时执行此操作:
git add ...; git commit -m thing1
... edit ...
git add ...; git commit -m thing2
# now fix thing1 bug noticed while working on thing2
... edit ...
git add ...; git commit --no-edit --fixup=HEAD^
... edit/test some more, discover fixup was not complete
git add ...; git commit --no-edit --fixup=HEAD
在这种情况下,第二修复线是
fixup! fixup! thing1
; rebase 只是再次查找“标题”为 thing1
的提交。)
如果您的目标是:
pick b988237 ...
squash f25491c ...
squash 78a7e48 ...
您需要以下提交消息:
* commit 78a7e4844fa32d2ef1bb7bd9b44c4a1b9551d31a (HEAD, new)
| Author: maxim koretskyi <[email protected]>
| Date: Fri Feb 20 10:29:48 2015 +0200
|
| squash! s1
|
* commit f25491cadc646baf14bd7e951245c6777230a1d7
| Author: maxim koretskyi <[email protected]>
| Date: Fri Feb 20 10:29:42 2015 +0200
|
| squash! s1
|
* commit b988237356ffb59752e49049d083c558373f9486
| Author: maxim koretskyi <[email protected]>
| Date: Fri Feb 20 10:29:24 2015 +0200
|
| s1
|
* commit abbcdc833e5eaabe79681bd82087b4d7969e8599 (new1, ne, 9484)
| Author: maxim koretskyi <[email protected]>
| Date: Wed Feb 18 18:21:58 2015 +0200
|
| 3
导致:
pick b988237 s1
squash f25491c squash! s1
squash 78a7e48 squash! s1
注意:
squash!
之后的提交消息必须用作挤压目标的参考。
使用上述提交消息,您可以通过以下任一方式获取交互式编辑器内容:
git rebase -i b988237356ffb59752e49049d083c558373f9486 --autostash
或者将
rebase.autostash
设置为 true 可以省略该标志,并且常规的 rebase 交互式命令就足够了:
git rebase -i b988237356ffb59752e49049d083c558373f9486