git commit --squash 选项有什么作用,为什么会有用?

Olo*_*ann 4 git git-commit

我一直在寻找一种替代解决方案来压缩分支中的一系列提交。我过去所做的是使用git rebase -i HEAD~<#commits>然后选择哪个提交来压缩。通常我pick编辑了最新的提交,并压缩了中间的冗余提交。

这种方法相当有效,但我希望有更快的方法。我注意到有一个--squash选项git commit。但我不确定这是如何工作的。它究竟有什么作用,你如何使用它?这会是我问题的解决方案吗?

Mar*_*oun 5

文档

--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
Run Code Online (Sandbox Code Playgroud)

这将把头放在HEAD~N,因此索引和工作目录根本不会改变,这意味着您现在可以使用git commit并为所有更改创建单个提交。