在 Git 中,squash 一词是用来将之前的提交压成一个。它不是一个命令;相反,它是一个关键词。Squash是一种很好的技术,用于在转发给其他人之前对特定的修改进行分组。你可以用引人注目的交互式 rebase 命令将几个提交合并成一个提交。
如果你是一个Git用户,那么你一定已经意识到Squash提交的重要性。特别是如果你是一个开源的贡献者,那么很多时候,你必须用压扁的提交创建一个PR(拉动请求)。如果你已经创建了一个PR,你也可以Squash提交。
让我们了解一下如何Squash提交?
Git Squash 提交
作为一个负责任的 Git 贡献者,有必要让协作过程变得高效而有意义。Git允许一些强大的协作工具以不同的方式进行协作。Git squash就是其中一个强大的工具,它能促进高效且不那么痛苦的协作。
squash不是任何命令;相反,它是在git交互式rebases下提供给你的许多选项之一。压扁允许我们重写历史。假设我们在项目工作中做了很多提交,把所有的提交压成一个大的提交是比推送正确的选择。让我们来了解如何压扁两个提交。
步骤1:检查提交历史
要检查提交历史,请运行以下命令。
$ git log --oneline
给出的命令将在一行中显示历史。我们可以追踪历史,选择我们想Squash的提交。请看下面的输出。
步骤2:选择要Squash的提交
假设我们想Squash最后的提交。要Squash提交,请运行下面的命令。
$ git rebase -i HEAD ~3
上述命令将打开你的默认文本编辑器,并将Squash最后三次提交。编辑器的打开方式如下。
从上图中,我们可以看到编辑器的顶部显示了之前的提交。如果我们想把它们合并成一个提交,那么我们必须把编辑器顶部的pick这个词替换成squash。要在编辑器上写作,按’i’键进入插入模式。编辑完文件后,按:wq
键保存并退出编辑器。
步骤三:更新提交
按下回车键后,会打开一个新的文本编辑器窗口来确认提交。我们可以在这个屏幕上编辑提交信息。
我正在编辑我的第一个提交信息,因为它将是所有三个提交的组合。请看下面的图片。
上图是确认提交合并的编辑界面。在这里我们可以更新提交信息。要在这个编辑器上进行编辑,按i
键为插入模式,编辑所需的文本。按:wq
键,保存并退出编辑器。
当我们退出编辑器时,它将显示更新的描述。考虑一下下面的输出。
上面的输出列出了在版本库上所做的修改的描述。现在,这些提交已经被Squash了。在 git 日志的帮助下,检查提交历史以确认。考虑一下下面的输出。
步骤4:推动压扁的提交
现在,我们可以把这个压扁的提交推送到远程服务器上。要推送这个压扁的提交,请执行下面的命令。
$ git push origin master
或
$ git push -f origin master
上面的命令会把修改推送到远程服务器上。我们可以在我们的远程版本库上检查这个提交。请看下面的图片。
从上面的图片可以看出。一个新的提交已经被添加到我的远程仓库。
Squashing 缺点
Squash没有明显的弊端。但我们可以考虑一些可能影响项目的事实。这些事实如下。
Squash提交和重新发布会改变版本库的历史。如果任何贡献者不注意更新的历史,那么就会产生冲突。我建议一个干净的历史,因为它比另一个历史更有价值。尽管我们可以在 ref log 中查看原始历史。
还有一个缺点,我们可能会因为压扁而失去颗粒度。在使用Git的过程中,要尽量减少压扁的次数。所以,如果你是Git的新手,那就尽量不要使用压扁法。