我一直在阅读有关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年第1季度)之前的另一个区别是,不能将“git commit --fixup
”与附加的提交消息组合在一起。
现在已经不是这样了。
参见commit 30884c9(2017年12月22日)。
帮助者:Ævar Arnfjörð Bjarmason (avar
)。
(于2017年12月22日由Eric Sunshine (sunshineco
)合并)avar
:添加对commit
的支持
添加对为--fixup <commit> -m"<extra message>"
提供-m
选项的支持。
这样做已经出错(“option--fixup
不能
自-m
被引入以来。
在此之前,在提交时修改fixup消息的唯一方法是使用--fixup
并在编辑器中修改它。
此功能的用例是:
在创建
为什么要在没有
注意到另一个。
(ab)使用--edit
功能“修复”已提交的提交
被推到一个不允许非快进的分支,
也就是说,只要注意“--fixup
”,
如果这段历史在未来被改写的话
合并。
在这种情况下你可能想留个小口信,
例如“--fixup
”。
请注意,在Git 2.17(2018年第2季度)之前,“this should have been part of that other commit
”不允许同时使用“forgot this part, which broke XYZ
”选项;允许它用更多文本注释结果提交。
参见Ævar Arnfjörð Bjarmason -- git commit --fixup
--,commit 30884c9(2017年12月22日)。
帮助者:commit 30884c9。
(于2018年2月27日由commit f55e84f合并)-m<message>
:添加对avar
的支持
添加对为sunshineco
提供gitster
选项的支持。这样做已经
自从引入commit
之后就被错误删除了。在此之前,唯一
提交时修改修复信息的方法是使用--fixup <commit> -m"<extra message>"
和
在编辑处修改。
此功能的用例是:
在创建
为什么要在没有
注意到另一个。
(ab)使用-m
功能“修复”已提交的提交
被推到一个不允许非快进的分支,
也就是说,只要注意到“这应该是另一个承诺的一部分”,
如果这段历史在未来被改写的话
合并。
在这种情况下你可能想留个小口信,
例如,“忘记了这部分,它打破了xyz”。
这样,--fixup
将导致
提交消息如下:
!fixup <subject of <commit>>
More
Details
当最初添加
--fixup
选项时,“option--edit
不能合并“错误从
--fixup
、--fixup
和--fixup <commit> -m"More" -m"Details"
扩展到还包括--fixup
(Ævar Arnfjörð Bjarmason (-m
),“commit:--fixup选项用于-c
”,2010-11-02,git 1.7.4-rc0)。