我一直在寻找一种替代的解决方案,用于压缩分支中的一系列提交。我过去所做的是使用git rebase -i HEAD~<#commits>
,然后选择要压扁的壁球。通常,我pick
使用最新的提交,并压缩之间的冗余提交。
此方法相当有效,但我希望有一个更快的方法。我注意到--squash
有一个git commit
选项。但是我不确定这是如何工作的。它到底有什么作用?如何使用?这可以解决我的问题吗?
documentation解释得很好:
--squash=<commit>
构造一个与
rebase --autosquash
一起使用的提交消息。提交消息主题行是从具有“ squash!”前缀的指定提交中提取的。可以与其他提交消息选项(-m
/-c
/-C
/-F
)。参见git-rebase[1]详细信息。
[这意味着--squash
(也是--fixup
标志)将提交作为参数,并格式化消息以供--autosquash
使用。可以在配置中设置rebase.autosquash = true
以缩短整个过程。
如果您要压缩最近的N
次提交,则可以执行以下操作:
git reset --soft HEAD~N && git commit
[这会将HEAD
重置为HEAD~N
,因此索引和工作目录根本不会改变,这意味着您现在可以使用git commit
并为所有更改创建单个提交。