git rebase -i 合并提交记录

命令介绍

rebase为变基
git rebase -i 命令可以压缩合并多次提交
格式:git rebase -i [startpoint] [endpoint]

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

在查看git的log后,可以使用如下命令

// 合并从当前head到15f745b(commit id)
git rebase -i 15f745b
或:
// 合并最近的两次提交
git rebase -i HEAD~212345

执行这个命令后会跳到一个vi编辑器
里面的提示有:
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 id

比如上图里面这些提交记录,我们想把前面4次记录合并到“重构”这次,那么我们就需要先获取“重构”这个提交记录 前面 那一次提交的commit id,就是那一串hash值,使用git log命令:

1
2
3
4
5
6
7
8
9
10
11
commit 01da1d7351dfea156eabc7ddf36a9e8eba227645 (tag: v1.1)
Author: wangbenjun <wangbenjun@gmail.com>
Date:   Fri Nov 19 22:00:16 2021 +0800

    重构

commit a0645baeb9938f34658f2766a2d4ec2855791da1 (tag: v1.0)
Author: wangbenjun <wangbenjun@gmail.com>
Date:   Wed Aug 18 20:47:34 2021 +0800

    优化目录结构

四次提交

第二步,把最近的三次提交合并为一个提交:git rebase -i HEAD~3

(或git rebase -i <倒数第四次提交的哈希值>,即该哈希值代表的提交不参与合并

修改内容,保存退出 这里显示提交记录从上到下是从远到近的顺序

第三步,注释并保存

把pick改成s之后保存,又会自动弹出一个新的编辑页面,内容大概如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# This is a combination of 5 commits.
# This is the 1st commit message:

重构

# This is the commit message #2:

fix

# This is the commit message #3:

update

# This is the commit message #4:

fix

其大意是这是这5次提交信息的合并,然后它会自动把每次提交的信息都给你列出来,这里你可以选择直接保存,也可以顺便修改一下,改成你想要的内容,然后保存。

第四步,推送到远程

完成上面的操作之后,再次使用git log则会发现提交记录已经变了,但是目前还只是在本地,还需要推送到远程,而且推送的时候必须使用–force,如:

1
git push origin --force

完成上述操作之后,整个git提交记录就会完全改变了,而且是不可逆操作,当然这也意味着rebase操作是有一定风险的,如果你不太清楚需要做什么的话就不要做。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值