我知道git commit --fixup <commit A's hash>
可以执行一次提交B,并将在执行git rebase -i --autosquash
时与提交A合并。
当我运行git log
时,我的提交日志看起来像
commit <commit B's hash>
Author: xxx
Date: xxx
fixup! commit A's comment
commit <commit A's hash>
Author: xxx
Date: xxx
commit A's comment
对我来说,修正提交看起来与普通的提交没有什么不同,除了注释前面带有“修正!”。
我想知道git如何以及在哪里跟踪 commit B
是一个标有<commit A's hash>
的修正提交的事实(如果有的话);如果是这样,是否有一个git log
等效项允许我与<commit A's hash>
一起访问commit B
?
谢谢!
答案 0 :(得分:0)
(免责声明:此答案基于观察结果)
它不会跟踪要修复的提交,它会在您进行基础更改时查找并使用提交消息找到正确的提交。
我尝试了以下操作:
然后我进行了修复提交,修复了这两个的最后一个
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>
。
为什么要这样做,而不是记录SHA,可能是因为它可以在重新设置基准,挑选樱桃等情况下幸免于难。此外,可能没有真正的方式来记录此sha以适当的方式,因为如果它确实记录了已修复的提交的阴影,那么该记录将阻止重新设置基准,或者也必须对其进行修改。