Git – 壁球
假设您正在使用 Git 作为版本控制来构建项目。你发布了第 1 版,之后你想为第 2 版添加新功能,甚至修复了第 1 版中发现的一些错误。在第 1 版发布后,你有大量的提交堆积如山。有没有办法将第一次发布后的所有提交合并为一个提交?是的,可以使用壁球。
Squash 是 git rebase 命令的交互模式中可用的有用且强大的功能之一。
现在我们有一个名为 GFG_VIDEO 的存储库,它是一个开源视频会议工具。 GFG_VIDEO 发布了他们工具的第一个版本,具有基本功能,例如点对点视频通话和带有标签 R_V1(绿色)的消息。在 R_V1 发布团队之后,GFG_VIDEO 开始添加新功能,例如创建群组、群组视频通话,以及修复 R_V1 中的小错误(例如掉线等)。现在 GFG_VIDEO 已准备好迎接他们的新版本 R_V2。如果您观察到,我们从初始提交到 R_V1(第一个版本)有 3 次提交。在我们的 R_V1 之后,我们为 R_V2(第 2 版)提交了 3 次提交,看起来有点凌乱且难以理解。在这里,我们可以使用 Squash 概念并将 R_V1 到 R_V2 之后的所有提交合并为一个提交,这使我们的存储库日志更加整洁和易于遵循。
实施:专注于壁球命令。
上图显示我们有 3 个提交:初始提交、提交 2、版本 1 发布。我们已经成功发布了 GFG_VIDEO 工具的第一版 (R_V1)。在 R_V1 添加了新功能并修复了先前版本的小错误之后,该工具已准备好用于其第二版 R_V2。
GFG_VIDEO 日志的上图是在第二版发布之后。可以观察到在第 1 版发布(标签:R_V1)之后,第 2 版发布有 3 次提交。这种看起来不整洁,为了更容易阅读,我们可以做一个 squash 操作。
让我们现在进行壁球
git rebase -i HEAD~3
rebase is an action to rewrite commits and it’s history -i is to enter into interactive mode of rebase HEAD~n states to perform our operation on n commits from HEAD
输入上述命令后,我们将获得一个交互式编辑器,其中包含我们选择的所有提交,我们将在其中执行 squash。
我们可以看到我们在交互式编辑器的开头选择了 3 个提交,在下面我们可以看到命令列表,例如 pick、reword、edit、squash 等。
任务:用第一次提交压缩第二次和第三次提交,所以我们将把第一个单词从 pick 更改为 squash。
whichever commits we want to squash we have to change it to squash from pick
将提交从 pick 更改为 squash 保存文件并关闭它后,将立即打开另一个编辑器,我们必须在其中输入最新的提交消息。
输入最新的提交消息并评论剩余的旧消息。
添加最新的提交消息后,保存文件并退出文件。现在它显示变基是成功的。
现在,如果我们看到 GFG_VIDEO 日志,我们可以观察到版本 1 发布后的 3 个提交被压缩为 1 个提交。