(免责声明:此答案基于观察)
它不会跟踪要修复的提交,它会在您执行变基时查找它并使用提交消息来找到正确的提交。
我尝试了以下方法:
- 创建了一个新的存储库
- 做了一些提交
- 进行了 2 次提交,均带有“初始”消息
然后我做了一个修复提交,修复了这两个中的最后一个
git commit --fixup bb4adbd
日志现在如下所示:
λ git lg
* 21e0572: (5 minutes ago) fixup! initial (HEAD -> master)
| Lasse Vågsæther Karlsen <lasse@vkarlsen.no> (Wed, 16 Jan 2019 17:32:51 +0100)
|
* bb4adbd: (5 minutes ago) initial
| Lasse Vågsæther Karlsen <lasse@vkarlsen.no> (Wed, 16 Jan 2019 17:32:38 +0100)
|
* e6549e4: (9 minutes ago) initial
| Lasse Vågsæther Karlsen <lasse@vkarlsen.no> (Wed, 16 Jan 2019 17:28:59 +0100)
|
* a311a82: (9 minutes ago) second
| Lasse Vågsæther Karlsen <lasse@vkarlsen.no> (Wed, 16 Jan 2019 17:28:12 +0100)
|
* 2a5ca27: (10 minutes ago) initial
Lasse Vågsæther Karlsen <lasse@vkarlsen.no> (Wed, 16 Jan 2019 17:27:12 +0100)
如果我这样做:
git rebase -i HEAD~3
然后 git 建议:
pick e6549e4 initial
fixup 21e0572 fixup! initial
pick bb4adbd initial
这里 git 正在尝试修复我的第一个“初始”提交,这不是我之前告诉它修复的那个。
但是,如果我只是这样做HEAD~2
,则表明:
pick bb4adbd initial
fixup 21e0572 fixup! initial
这意味着 git 根本不会跟踪这是关于哪个提交,它只是fixup! <commit message>
在修复提交的提交消息的末尾记录 a 。
关于它为什么这样做而不是记录 SHA 的猜测是,这将在 rebase、cherry-pick 等中幸存下来。此外,这可能是在没有真正的方式以适当的方式记录此 sha 的情况下添加的方式,因为如果它确实记录了它修复的提交的 sha,那么该记录将阻止变基,或者也必须进行修改。