我正在尝试使用autosquashgit-rebase提供的选项压缩最后3次提交.我有以下历史:
* commit 78a7e4844fa32d2ef1bb7bd9b44c4a1b9551d31a (HEAD, new)
| Author: maxim koretskyi <mkoretskyi@company.com>
| Date: Fri Feb 20 10:29:48 2015 +0200
|
| squash! s3
|
* commit f25491cadc646baf14bd7e951245c6777230a1d7
| Author: maxim koretskyi <mkoretskyi@company.com>
| Date: Fri Feb 20 10:29:42 2015 +0200
|
| squash! s2
|
* commit b988237356ffb59752e49049d083c558373f9486
| Author: maxim koretskyi <mkoretskyi@company.com>
| Date: Fri Feb 20 10:29:24 2015 +0200
|
| squash! s1
|
* commit abbcdc833e5eaabe79681bd82087b4d7969e8599 (new1, ne, 9484)
| Author: maxim koretskyi <mkoretskyi@company.com>
| Date: Wed Feb 18 18:21:58 2015 +0200
|
| 3
Run Code Online (Sandbox Code Playgroud)
所以我想要提交消息s1,s2并s3以前缀squash!为基础进行压缩.现在我发出以下命令:
$ git rebase -i abbcdc833 --autosquash
Run Code Online (Sandbox Code Playgroud)
所以git打开一个文本编辑器,其中包含以下内容:
pick b988237 squash! s1
pick f25491c squash! s2
pick 78a7e48 squash! s3
Run Code Online (Sandbox Code Playgroud)
但我希望它是这样的:
pick b988237 squash! s1
squash f25491c squash! s2
squash 78a7e48 squash! s3
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
tor*_*rek 12
从文档,但强调我的:
当提交日志消息以"squash!..."(或"fixup!...")开头,并且有一个提交标题以相同的...开头时,自动修改todo列表
rebase -i以便提交标记为压缩是在提交修改后立即进行的,并将移动的提交的操作从pick更改为squash(或fixup).在第一次之后忽略后续的"fixup!"或"squash!",以防你提到早期的fixup/squashgit 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
Run Code Online (Sandbox Code Playgroud)
在这种情况下,第二个修正的线是fixup! fixup! thing1; rebase只是寻找一个"标题"的提交thing1.)