Git 压缩所有提交
在每个开发人员的生活中,在使用 Git 分布式控制系统时经常会用到 squash 这个词。 Git 中的这个功能是一个方便的选项,开发人员经常使用它来在开发团队中实现整洁的工作流程。
在本节中,我们将详细讨论 Git 的主要功能,即 Squashing。 此外,压缩的过程以及我们在与开发团队合作时为什么需要它。
Git 压缩
首先,我们需要知道什么是压扁。 通常,挤压是将某些东西与所有可用的东西混合在一起。
在 Git 中,术语 squash 用于使用命令行将各种提交合并为一个提交。 此功能使事物保持先进先出的正确顺序。
让我们用下面的例子来解释提交中的压缩和排序顺序。
A ◄───── B ◄──── C ◄───── D
After Squashing commits B, C, and D:
A ◄───── E
Commit E includes the commits B, C, and D changes.
假设我们将所有提交合并到一个新的提交 E 中。现在提交 E 包含在提交 B、C 和 D 中所做的更改。
压缩是专门为了在更长的生命周期内保持分支图的整洁而进行的。
在应用程序中使用新功能时,很明显我们会在获得所需结果之前进行几次提交。 这可能是对质量保证团队或某些测试报告的错误的一些修复。
应用这些功能后,我们收集了一些无关紧要的提交,这些提交使我们的分支看起来乱七八糟。 对于这种情况,我们将在该存储库分支中进行压缩。
它将帮助我们将这些冗余提交合并为一个。
这里要记住的要点是 squash 不是 Git 命令。 但是,这是必不可少的 Git 操作。
如果我们执行 git squash
,它会报错,因为它只是一个操作,可以通过 Git 交互式 rebase 命令来执行。
使用 Git Interactive Rebase 压缩所有提交
借助 Git 的交互式 rebase 功能,我们可以在分支生命周期的任何时间点手动压缩我们的提交。 让我们开始使用别名 slog 执行以下命令,这将帮助我们查看紧凑的提交日志。
$ git config --global alias.slog = log --graph --all --topo-order --pretty='format:%h %ai %s%d (%an)'
输出结果:
$ git slog
* ac1sd5f 2022-02-11 11:09:15 +0600 Commit D (HEAD -> master) (test)
* 5dasq6f 2022-02-11 11:09:02 +0600 Commit C (test)
* 5asa04d 2022-02-11 11:09:02 +0600 Commit B (test)
* c40as62 2022-02-11 11:10:56 +0600 Commit A (test)
* 29awqc5 2022-02-11 11:10:33 +0600 BugFix #1 (test)
* 3asafeb 2022-02-11 11:10:19 +v Feature1 implemented (test)
* cbas10d 2022-02-11 11:26:19 +0600 Init commit (test)
此处,Git 命令 Interactive Rebase 还将在默认编辑器中显示所有相关提交以及排序顺序。 在这里,我们想要压缩这些提交,控制它们并使用 Git 命令将它们保存在编辑器中。
以下是用于压缩最后 X 次提交的命令:
$ git rebase -i HEAD~[X]Copy
因为我们想要压缩最后 4 次提交,所以我们将在上面的命令中提到 4 而不是 X。
$ git rebase -i HEAD~4Copy
当我们说 last X commits 时,它意味着 last x 从头到尾提交。
作为交互式 rebase 的结果,Git 的默认编辑器启动并开始压缩我们希望在一次提交中的提交。 使用命令 pick 列出的提交是我们要压缩的提交。
现在,我们将把提交的命令 pick 更改为 s 或 squash,这样这些提交就会被压缩。
之后,我们将保存更改并关闭编辑器。 git rebase
操作将按照我们的说明执行。
$ git rebase -i HEAD~4
[detached HEAD fa29cd5] Commit A
Date: Tue Sep 04 11:10:11 2022 +0600
1 file changed, 1 insertion(+), 1 deletion(-)
Successfully rebased and updated refs/heads/master.
Rebase 成功执行。 为了让我们满意,我们可以通过再次执行 git slog
命令来查看我们的提交日志,如下所示:
$ git slog
* f9SAEd5 2022-05-22 4:09:02 +0600 Commit A (HEAD -> master) (test)
* 29aS6c5 2022-05-22 4:09:02 +0600 BugFix #1 (test)
* 34faseb 2022-05-22 4:09:02 +0600 Feature1 implemented (test)
* cbadw0d 2022-05-22 4:09:02 +0600 Init commit (test)
正如我们在上面的输出窗口中看到的那样,最后 4 次提交被压缩为一个,开发人员很容易将所有四个不同的提交合并到一个功能提交中。
相关文章
如何在 Windows 系统中卸载 git
发布时间:2023/04/09 浏览次数:223 分类:Git
-
在这篇简短的文章中,我们将学习如何卸载 Git,以及如何在从个人计算机的目录中卸载 Git 后删除这些文件。
Git 如何重命名本地分支
发布时间:2023/04/09 浏览次数:64 分类:Git
-
大多数情况下,重命名分支机构是由于上述情况。 因此,在本教程中,我们将学习使用下面提到的技术更改本地 Git 分支的名称。
重命名 Git 存储库中的文件和目录
发布时间:2023/04/09 浏览次数:102 分类:Git
-
在本文中,我们将讨论 git 中的重命名过程。 我们使用 Git Rename 来更改工作目录中文件和文件夹的名称。
在 Git 中取消初始化存储库
发布时间:2023/04/09 浏览次数:187 分类:Git
-
本本文介绍如何通过 Git 命令行取消初始化 Git 存储库。git init 命令开发一个新的空置 Git 存储库。 它还用于重新初始化已经存在的 Git 存储库。
Git 仓库名称该如何命名
发布时间:2023/04/09 浏览次数:208 分类:Git
-
使用 Git 时,选择一个简洁且最新的存储库名称是一项艰巨的任务。本教程介绍了如何以独特的方式命名 Git 存储库。
配置 Git 以忽略文件模式更改
发布时间:2023/04/09 浏览次数:67 分类:Git
-
本文讨论配置 Git 以忽略文件更改 chmod 所需的步骤。 如果您更改 Git 正在跟踪的文件的权限,系统将在该文件中注册更改。
在 Git 中暂存已删除的文件
发布时间:2023/04/09 浏览次数:93 分类:Git
-
本文讨论了在 Git 中暂存已删除文件的必要步骤。我们知道 rm 命令可以删除一个文件,而无需将其从工作目录中移除。 那么,我们如何暂存已删除的文件以进行提交呢?
在 Git 中显示冲突文件
发布时间:2023/04/09 浏览次数:139 分类:Git
-
本文讨论在 Git 中列出冲突文件的最简单和最干净的方法。 我们可以使用 git status 命令,但这很麻烦,尤其是当我们有大量不冲突的文件时。