65.9K
CodeProject 正在变化。 阅读更多。
Home

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

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2019年6月15日

CPOL

3分钟阅读

viewsIcon

6534

如何使用Squash将多个git提交合并为GIT中的单个提交

引言

作为一名开发者,我们都希望提交记录更加清晰。与此同时,在开发过程中,我也想保留我所做更改和提交的详细记录。从开始到结束,根据范围的不同,我可能已经进行了许多琐碎的提交,在我对更改感到满意后,我希望有几个(有时是一个,有时是多个)提交来表明更改了什么,而不是有几个提交消息。

GIT中的Squash可以用来将多个单独的提交合并为一个。这使得存储库中的提交记录更清晰。举例来说,假设我们从问题开发的开始到结束有大约25个提交。在这25个提交中,进行了一些代码更改,这些更改可能对保留在存储库中并不重要。这些25个提交可以被合并为一个提交,然后才能合并到主分支中。

交互模式下的rebase命令(即-i--interactive)可以用来将这些提交合并为一个。

我在本文中使用的是git bash,并且在一个分支上有25个提交,我想修改为只有一个提交来反映一个功能已经完成。

Git 提交历史

重定位

运行以下命令以确保我正在选择我所在分支中的25个提交。

git rebase -i Head~25

Git Bash 窗口

上面的命令指示从头部获取25个提交。执行后,git会打开一个文本编辑器,显示最后25个提交的提交详细信息(消息)。

编辑器用于将提交标记为 squash 或 pick

编辑器将取决于配置文件中的设置。Vim、Nano 或 Notepad 是常见的选择。您可以通过修改 .gitconfig 中的设置来选择您喜欢的编辑器。根据编辑器的不同,屏幕截图可能与我在此处描述的不同。请参阅 https://codeproject.org.cn/Tips/5163724/Update-Editor-for-Git ,获取有关在 git 中更新编辑器选择的提示。

我可以编辑提交,方法是将所有提交上的“pick”更改为“squash”,并在所有提交上放置“Squash”,并保留一个带有“pick”的提交,可能是列表中的第一个提交,即最新的提交。我们可以稍后更改该消息。在示例中,我选择了第一个,如图所示

将提交标记为 squash 或 pick 后的编辑器

通过单击左上角的**保存**按钮保存编辑器中的更改,并通过单击右上角的“**x**”关闭窗口。

rebase 完成后,分支将更改为显示在编辑器中带有“pick”的提交消息。

更新提交消息

此时,提交消息可能不相关,因此可能需要更改提交消息。这可以通过以下方式实现

git commit –amend

上面的命令将像以前一样打开一个编辑器,显示所有以前的提交消息,可以将其更改为相关的消息并保存并关闭编辑器。之后,git 将更新消息。

处理远程仓库

如果该分支先前已推送到远程仓库,我们也需要将提交同步到远程仓库。

由于该分支在远程仓库中显示不同,因此可能会发现冲突。因此,我们必须强制本地分支,这将通过squash用最新的本地更改替换远程仓库。

Git push –force

通过rebaseamendforce,我能够将二十五个较小的提交合并为一个,并在远程和本地都具有一个清晰的消息。

使用 Squash 将多个 git 提交合并为 GIT 中的单个提交 - CodeProject - 代码之家
© . All rights reserved.