在GIT中使用Squash将多个git提交合并为一个提交





0/5 (0投票)
如何使用Squash将多个git提交合并为GIT中的单个提交
引言
作为一名开发者,我们都希望提交记录更加清晰。与此同时,在开发过程中,我也想保留我所做更改和提交的详细记录。从开始到结束,根据范围的不同,我可能已经进行了许多琐碎的提交,在我对更改感到满意后,我希望有几个(有时是一个,有时是多个)提交来表明更改了什么,而不是有几个提交消息。
GIT中的Squash可以用来将多个单独的提交合并为一个。这使得存储库中的提交记录更清晰。举例来说,假设我们从问题开发的开始到结束有大约25个提交。在这25个提交中,进行了一些代码更改,这些更改可能对保留在存储库中并不重要。这些25个提交可以被合并为一个提交,然后才能合并到主分支中。
交互模式下的rebase
命令(即-i
或--interactive
)可以用来将这些提交合并为一个。
我在本文中使用的是git bash
,并且在一个分支上有25个提交,我想修改为只有一个提交来反映一个功能已经完成。
重定位
运行以下命令以确保我正在选择我所在分支中的25个提交。
git rebase -i Head~25
上面的命令指示从头部获取25个提交。执行后,git会打开一个文本编辑器,显示最后25个提交的提交详细信息(消息)。
编辑器将取决于配置文件中的设置。Vim、Nano 或 Notepad 是常见的选择。您可以通过修改 .gitconfig 中的设置来选择您喜欢的编辑器。根据编辑器的不同,屏幕截图可能与我在此处描述的不同。请参阅 https://codeproject.org.cn/Tips/5163724/Update-Editor-for-Git ,获取有关在 git 中更新编辑器选择的提示。
我可以编辑提交,方法是将所有提交上的“pick
”更改为“squash
”,并在所有提交上放置“Squash
”,并保留一个带有“pick
”的提交,可能是列表中的第一个提交,即最新的提交。我们可以稍后更改该消息。在示例中,我选择了第一个,如图所示
通过单击左上角的**保存**按钮保存编辑器中的更改,并通过单击右上角的“**x**”关闭窗口。
rebase 完成后,分支将更改为显示在编辑器中带有“pick
”的提交消息。
更新提交消息
此时,提交消息可能不相关,因此可能需要更改提交消息。这可以通过以下方式实现
git commit –amend
上面的命令将像以前一样打开一个编辑器,显示所有以前的提交消息,可以将其更改为相关的消息并保存并关闭编辑器。之后,git 将更新消息。
处理远程仓库
如果该分支先前已推送到远程仓库,我们也需要将提交同步到远程仓库。
由于该分支在远程仓库中显示不同,因此可能会发现冲突。因此,我们必须强制本地分支,这将通过squash
用最新的本地更改替换远程仓库。
Git push –force
通过rebase
、amend
和force
,我能够将二十五个较小的提交合并为一个,并在远程和本地都具有一个清晰的消息。