我一直在阅读关于commit和rebase的git文档,但是我仍然不明白在执行fixup!
时使用squash!
或rebase --autosquash
作为提交消息的前缀之间的区别。我相信我理解fixup!
在fixing previous commits方面做了什么,但是我没有看到使用squash!
的好例子。任何人都可以澄清两者之间的区别,并给出一些不同的使用方式吗?提前致谢!
正如我在“Trimming Git Commits/Squashing Git History”中所说,并总结:
与修复!指令,您可以在提交消息中保持压缩“不可见”,同时仍然可以通过
--autosquash
选项自动提交重新排序
正如Op Dash评论:
使用
squash!
将保证压缩操作记录在历史记录中,这与fixup!
不同,其中壁球操作对于更“更清洁”的方法是不可见的。
在Git 2.16.x / 2.17(2018年第一季度)之前的另一个不同之处在于,您无法将“git commit --fixup
”与其他提交消息相结合。
现在不再是这种情况了。
请参阅由commit 30884c9撰写的Ævar Arnfjörð Bjarmason (avar
)(2017年12月22日)。
帮助:Eric Sunshine (sunshineco
)。
(Ævar Arnfjörð Bjarmason -- avar
--于2017年12月22日在commit 30884c9合并)
commit
:增加对--fixup <commit> -m"<extra message>"
的支持添加对
-m
提供--fixup
选项的支持。 自从引入-m
以来,这样做是错误的(“选项--fixup
不能合并”)。 在此之前,在提交时修改fixup消息的唯一方法是使用--edit
并在编辑器中修改它。此功能的用例是以下之一:
- 在创建
--fixup
提交时给自己留下一个快速注释,当不明确为什么提交应该被压扁而没有注释到另一个提交时。- (Ab)使用
--fixup
功能来“修复”已经被推送到不允许非快进的分支的提交, 即只是注意到“this should have been part of that other commit
”,如果将来改写历史,那么两者应该结合起来。在这种情况下,您可能希望留下一条小信息, 例如“
forgot this part, which broke XYZ
”。
请注意,在Git 2.17(2018年第二季度)之前,“git commit --fixup
”不允许同时使用“-m<message>
”选项;允许它用更多文本注释结果提交。
请参阅由commit 30884c9撰写的commit f55e84f,Ævar Arnfjörð Bjarmason (avar
)(2017年12月22日)。
帮助:Eric Sunshine (sunshineco
)。
(由Junio C Hamano -- gitster
--合并于commit c1ab3b8,2018年2月27日)
commit
:增加对--fixup <commit> -m"<extra message>"
的支持添加对
-m
提供--fixup
选项的支持。自从引入--fixup
以来,这样做已经犯了错误。在此之前,在提交时修改fixup消息的唯一方法是使用--edit
并在编辑器中修改它。
此功能的用例是以下之一:
- 在创建
--fixup
提交时给自己留下一个快速注释,当不明确为什么提交应该被压扁而没有注释到另一个提交时。- (Ab)使用
--fixup
功能来“修复”已经被推送到不允许非快进的分支的提交,即只注意到“这应该是其他提交的一部分”,并且如果历史曾被改写,将来两者应该结合起来。 在这种情况下,您可能希望留下一条小信息,例如“忘了这部分,打破了XYZ”。有了这个,
--fixup <commit> -m"More" -m"Details"
将导致提交消息,如:!fixup <subject of <commit>> More Details
当
--fixup
选项最初添加时,“选项-m
无法合并”错误从-c
,-C
和-F
扩展到也包括--fixup
(commit d71b8ba,“commit: - fixup option forrebase --autosquash
”,2010-11-02, Git 1.7.4-rc0))。