Git Squash

2025 年 5 月 18 日 | 3 分钟阅读

在 Git 中,术语 squash 用于将先前的提交合并为一个。它不是一个命令;相反,它是一个关键词。squash 是一种在将特定更改转发给其他人之前将它们分组的绝佳技术。 您可以使用强大的交互式 rebase 命令将多个提交合并为一个提交。

如果您是 Git 用户,那么您一定已经意识到 squash 提交的重要性。 尤其是在您是开源贡献者的情况下,很多时候,您必须使用 squashed 提交创建一个 PR(拉取请求)。 如果您已经创建了 PR,您也可以使用 squash 提交。

让我们了解如何 squash 提交?

Git Squash 提交

作为 Git 的负责任的贡献者,有必要使协作过程高效且有意义。 Git 以不同的方式允许一些强大的协作工具。 Git squash 是一个强大的工具,有助于高效且无痛的协作。

squash 不是任何命令;相反,它是您在 git 交互式 rebase 下可用的众多选项之一。 squash 允许我们重写历史记录。 假设我们在项目工作期间进行了许多提交,将所有提交 squash 成一个大提交是正确的选择,而不是推送。 让我们了解如何 squash 两个提交。

步骤 1:检查提交历史记录

要检查提交历史记录,请运行以下命令

给定的命令将在一行中显示历史记录。 我们可以跟踪历史记录并选择我们要 squash 的提交。 考虑以下输出

Git Squash

步骤 2:选择要 squash 的提交。

假设我们要 squash 最后的提交。 要 squash 提交,请运行以下命令

上面的命令将打开您的默认文本编辑器,并将 squash 最后三个提交。 编辑器将如下打开

Git Squash 1

从上图中,我们可以看到编辑器顶部显示了先前的提交。 如果我们要将它们合并成一个提交,那么我们必须在编辑器顶部将单词pick替换为squash。 要在编辑器上写入,请按“i”按钮进入插入模式。 编辑文档后,按:wq保存并退出编辑器。

步骤 3:更新提交

enter键后,将打开一个文本编辑器的新窗口以确认提交。 我们可以在此屏幕上编辑提交消息。

我正在编辑我的第一个提交消息,因为它将是所有三个提交的组合。 考虑以下图像

Git Squash 2

上图是用于确认合并提交的编辑器屏幕。 在这里,我们可以更新提交消息。 要在此编辑器上编辑,请按“i”按钮进入插入模式并编辑所需的文本。 按:wq键保存并退出编辑器。

当我们退出编辑器时,它将显示更新的描述。 考虑以下输出

Git Squash 3

上面的输出列出了对存储库所做的更改的描述。 现在,提交已被 squashed。 借助 git log 的帮助,检查提交历史记录以进行确认。 考虑以下输出

Git Squash 4

步骤 4:推送 squashed 提交

现在,我们可以在远程服务器上推送此 squashed 提交。 要推送此 squashed 提交,请运行以下命令

上面的命令会将更改推送到远程服务器上。 我们可以在我们的远程存储库上检查此提交。 考虑以下图像

Git Squash 5

从上图可以看出。 已经向我的远程存储库添加了一个新提交。

Squashing 的缺点

Squashing 没有任何明显的缺点。 但是我们可以考虑一些可能会影响项目的事实。 这些事实如下

squashing 提交和变基会更改存储库的历史记录。 如果任何贡献者没有注意更新后的历史记录,则可能会产生冲突。 我建议使用干净的历史记录,因为它比另一个更有价值。 尽管我们可以在 ref log 中检查原始历史记录。

还有另一个缺点,由于 squashing,我们可能会失去粒度。 尝试在 Git 工作时进行最少的 squash。 因此,如果您是 Git 的新手,请尽量远离 squash。