使用“fixup!”或“squash!”之间是否有任何真正的区别?

问题描述 投票:4回答:1

我一直在阅读关于commitrebase的git文档,但是我仍然不明白在执行fixup!时使用squash!rebase --autosquash作为提交消息的前缀之间的区别。我相信我理解fixup!fixing previous commits方面做了什么,但是我没有看到使用squash!的好例子。任何人都可以澄清两者之间的区别,并给出一些不同的使用方式吗?提前致谢!

git git-rebase git-commit
1个回答
4
投票

正如我在“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扩展到也包括--fixupcommit d71b8ba,“commit: - fixup option for rebase --autosquash”,2010-11-02, Git 1.7.4-rc0))。

© www.soinside.com 2019 - 2024. All rights reserved.