我正在尝试使用 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!
将 s3
作为其 ...
部分。因此,rebase 查找将 s3
作为其“标题”的提交(文档中从未定义过,但它似乎表示“一行描述”,即日志消息的第一行)。列表中没有这样的提交。
转到第二个,我们发现了同样的问题,第三个也是如此。
如果您的第一次提交(标题为 s1
)之后是一个标题为 squash! s1
的提交,那么该特定提交将得到一个“ Squash ”字样。
(请注意,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
的提交。)关于git - 使用 autosquash 重新定位无法按预期工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28624671/