我一直在commit和rebase上阅读git文档,但我仍然不了解使用fixup!
或squash!
作为执行rebase --autosquash
时提交消息的前缀。我相信我理解fixup!
在fixing previous commits方面的作用,但我没有看到使用squash!
的好例子。任何人都可以澄清两者之间的区别,并给出一些不同的使用方式吗?提前谢谢!
答案 0 :(得分: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
--合并于commit 30884c9,2017年12月22日)
的支持
commit
:添加对--fixup <commit> -m"<extra message>"
添加对
-m
选项提供--fixup
的支持 这样做有误(&#34;选项-m
不能 自--fixup
被引入以来,已经合并了# 在此之前,在提交时修改fixup消息的唯一方法是使用--edit
并在编辑器中修改它。此功能的用例是以下之一:
在创建
--fixup
提交时给自己留下快速通知 不明白为什么在没有a的情况下应该压制这个提案并不是不言而喻的 请注意另一个。(Ab)使用
--fixup
功能来&#34;修复&#34;已提交的提交 被推到一个不允许非快进的分支,
即只注意&#34;this should have been part of that other commit
&#34;, 如果历史在未来被重写,那么两者应该 合并。在这种情况下,您可能希望留下一条小信息,
例如&#34;forgot this part, which broke XYZ
&#34;
请注意,在Git 2.17(2018年第二季度)和#34; git commit --fixup
&#34;之前不允许&#34; -m<message>
&#34;选项同时使用;允许它用更多文本注释结果提交。
commit 30884c9见commit f55e84f,Ævar Arnfjörð Bjarmason (avar
)(2017年12月22日)。{
帮助:Eric Sunshine (sunshineco
)。
(Junio C Hamano -- gitster
--于2018年2月27日commit c1ab3b8合并)
的支持
commit
:添加对--fixup <commit> -m"<extra message>"
添加对
-m
选项提供--fixup
的支持。这样做了 自--fixup
被引入以来一直存在错误。在此之前,唯一的 提交时修改fixup消息的方法是使用--edit
和 在编辑器中修改它。
此功能的用例是以下之一:
在创建
--fixup
提交时给自己留下快速通知 不明白为什么在没有a的情况下应该压制这个提案并不是不言而喻的 请注意另一个。(Ab)使用
--fixup
功能来&#34;修复&#34;已提交的提交 被推到一个不允许非快进的分支, 即只注意&#34;这应该是其他提交的一部分&#34;, 如果历史在未来被重写,那么两者应该 合并。在这种情况下,你可能想留一条小信息, 例如&#34;忘了这部分,打破了XYZ&#34;。
这样,
--fixup <commit> -m"More" -m"Details"
将导致a 提交消息,如:!fixup <subject of <commit>> More Details
最初添加
--fixup
选项时,&#34;选项-m
不能 合并&#34;错误已从-c
,-C
和-F
扩展到也包括在内--fixup
(commit d71b8ba,&#34; commit: - fixup选项,用于rebase --autosquash
&#34;,2010-11-02,Git 1.7.4-rc0))。