Git通过rebase合并多个commit

在使用 Git 作为版本控制的时候,我们可能会由于各种各样的原因提交了许多临时的 commit,而这些 commit 拼接起来才是完整的任务。那么我们为了避免太多的 commit 而造成版本控制的混乱,通常我们推荐将这些 commit 合并成一个。

1. 查看提交历史 git log

首先你要知道自己想合并的是哪几个提交,可以使用 git log 命令来查看提交历史,假如最近 4 条历史如下:

go 复制代码
commit 3ca6ec340edc66df13423f36f52919dfa3......

commit 1b4056686d1b494a5c86757f9eaed844......

commit 53f244ac8730d33b353bee3b24210b07......

commit 3a4226b4a0b6fa68783b07f1cee7b688.......

历史记录是按照时间排序的,时间近的排在前面。

2. git rebase

想要合并 1-3 条,有两个方法

从HEAD版本开始往过去数3个版本

go 复制代码
git rebase -i HEAD~3

指名要合并的版本之前的版本号

go 复制代码
git rebase -i 3a4226b

请注意 3a4226b 这个版本是不参与合并的,可以把它当做一个坐标

3. 选取要合并的提交

执行了 rebase 命令之后,会弹出一个窗口,头几行如下:

go 复制代码
pick 3ca6ec3   '注释**********'

pick 1b40566   '注释*********'

pick 53f244a   '注释**********'

将 pick 改为 squash 或者 s,之后保存并关闭文本编辑窗口即可。改完之后文本内容如下:

go 复制代码
pick 3ca6ec3   '注释**********'

s 1b40566   '注释*********'

s 53f244a   '注释**********'

然后保存退出,Git 会压缩提交历史,如果有冲突,需要修改,修改的时候要注意,保留最新的历史,不然我们的修改就丢弃了。修改以后要记得敲下面的命令:

go 复制代码
git add .  

git rebase --continue  

如果你想放弃这次压缩的话,执行以下命令:

go 复制代码
git rebase --abort  

如果没有冲突,或者冲突已经解决,则会出现如下的编辑窗口:

go 复制代码
# This is a combination of 4 commits.  
#The first commit's message is:  
注释......
# The 2nd commit's message is:  
注释......
# The 3rd commit's message is:  
注释......
# Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit.

输入 wq 保存并推出, 再次输入 git log 查看 commit 历史信息,你会发现这两个 commit 已经合并了。

通过IDEA或者GOLAND便捷式操作 https://blog.csdn.net/huangjhai/article/details/109557946

相关推荐
张小凡vip26 分钟前
gitlab的ci配置文件yaml参数说明
git·ci/cd·gitlab
搬砖的前端37 分钟前
AI工具集:Git提交时使用AI进行CodeReview如何在前端应用构建NPM包
前端·人工智能·git·npm·codeview
ZXF_H1 小时前
Git clone 时遇到fatal: protocol ‘http‘ is not supported问题解决方法
git
傻啦嘿哟1 小时前
日志分析:利用OpenClaw日志排查“403”和“503”错误
java·git·github
摆烂菜鸡沧9962 小时前
【自用记录】修改GitHub提交历史作者
git·github
佳木逢钺11 小时前
Git分支强制覆盖与冲突解决实战记录
git·源代码管理
屋外雨大,惊蛰出没18 小时前
Git基本应用
git
_Evan_Yao18 小时前
一文搞懂:Git分支管理与团队协作规范——从GitFlow到GitHub Flow,从rebase到merge,打造高效协作流
java·git·后端·github
憧憬成为java架构高手的小白19 小时前
git工作流程简化版
java·spring boot·git
东风微鸣20 小时前
Argo CD 用户管理:本地用户配置与权限分离实践
git·后端