使用git rebase合并多次commit

Gitrebase命令用于编辑线性提交历史,如删除、合并提交,以保持提交历史整洁。在交互式模式下,用户可以选择pick,reword,edit等指令。在解决冲突后,使用gitrebase--continue继续合并。如果commit已推送到公共仓库,不应使用rebase。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

rebase的作用简要概括为:

可以对某一段线性提交历史进行编辑、删除、复制、粘贴;因此,合理使用rebase命令可以使我们的提交历史干净、简洁!
但是需要注意的是:

不要通过rebase对任何已经提交到公共仓库中的commit进行修改(你自己一个人玩的分支除外)

命令:

基本格式如下

git rebase -i  [startpoint]  [endpoint]

其中-i的意思是–interactive,即弹出交互式的界面让用户编辑完成合并操作,[startpoint] [endpoint]则指定了一个编辑区间,如果不指定[endpoint],则该区间的终点默认是当前分支HEAD所指向的commit(注:该区间指定的是一个前开后闭的区间)。

查看了log日志后,可以运行以下命令:

git rebase -i f8773b6c

或者:

git rebase -i HEAD~3 

可以看到如下界面:
在这里插入图片描述
上面未被注释的部分列出的是我们本次rebase操作包含的所有提交,下面注释部分是git为我们提供的命令说明。每一个commit id 前面的pick表示指令类型,git 为我们提供了以下几个命令:

pick:保留该commit(缩写:p)
reword:保留该commit,但我需要修改该commit的注释(缩写:r)
edit:保留该commit, 但我要停下来修改该提交(不仅仅修改注释)(缩写:e)
squash:将该commit和前一个commit合并(缩写:s)
fixup:将该commit和前一个commit合并,但我不要保留该提交的注释信息(缩写:f)
exec:执行shell命令(缩写:x)
drop:我要丢弃该commit(缩写:d)

合并commit会用到squash,针对上面的提交可以改为:

pick 82fc74c7 
s dc6c19fb 
s f8773b6c 

此时如果一切顺利,“wq” 或者 “ctrl+x" 就会进入编辑提交记录的界面,将多余的记录注释掉或者改一下,就可是再次 “wq” 或者 “ctrl+x" 保存退出了。
正常情况到这里就结束了,但总会有意外发生,如果在rebase多个提交的时候出想了冲突,合 并就终止,等待冲突解决后才能够继续。

解决冲突:

如果合并被中断,可以使用 “git status” 命令查看状态:

git status

会打印如下信息:
在这里插入图片描述
假设这里的冲突文件是 “a.go”,可以使用vi或者其它编辑工具处理冲突,然后用 “git add” 命令标记冲突已解决:

git add a.go

之后执行 “git rebase --continue” 继续合并提交。

git rebase --continue

注意:如果多个提将间冲突较多,可能需要重复上面解决冲突的步骤,直至全部冲突都被解决之后,合并才会成功。

遗留问题:

如果分支在合并commit之前,已经将某些需要被合并的commit通过push命令传到了远程仓库,那么在合并commit之后,那些本应合并在一起的提交还会出现在提交日志中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高晓伟_Steven

相逢即是有缘,动力源于金钱。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值