Git rebase -i

Git rebase -i

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

使用场景

当你想把多个 commit 合并成一个 commit

image-20220407182433554

使用前:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
commit 77e3eca369c30b78daae093b34fcfcd041811f45 (HEAD, master)
Author: DuoRouSai <1158461087@qq.com>
Date: Thu Apr 7 15:57:02 2022 +0800

第四次提交

commit 1d911bed06c6a1ef26c824375d0ce8c95ee98f00
Author: DuoRouSai <1158461087@qq.com>
Date: Thu Apr 7 14:49:47 2022 +0800

第三次提交

commit e7ace4479370720c7efeafa0a3d0dda55f61e1a5
Author: DuoRouSai <1158461087@qq.com>
Date: Thu Apr 7 14:49:37 2022 +0800

第二次提交

commit 6e8cc7a5d0f938e1bd8fcb284728f2902188e543
Author: DuoRouSai <1158461087@qq.com>
Date: Thu Apr 7 14:48:46 2022 +0800

第一次提交

使用后:

1
2
3
4
5
6
7
8
9
10
11
12
commit dcdf6abba41366a042acf2620ab010d947ac53cc (HEAD -> master)
Author: DuoRouSai <1158461087@qq.com>
Date: Thu Apr 7 14:49:37 2022 +0800

第 2、3、4次提交

commit 6e8cc7a5d0f938e1bd8fcb284728f2902188e543
Author: DuoRouSai <1158461087@qq.com>
Date: Thu Apr 7 14:48:46 2022 +0800

第一次提交

01 git rebase -i

其中 -i => –interactive

(startpoint, endpoint] 前开后闭,可以省略 endpoint ,默认指向当前的 HEAD

1
git rebase -i  [startpoint]  [endpoint]
1
2
git rebase -i commit_id
git rebase -i HEAD~3

输入完命令后,会进入交互模式(下边编辑器)

02 进入编辑器

image-20220407182959377

黄色区域,是我们本次需要 commit 的所有提交

pick e7ace44 第二次提交
s 1d911be 第三次提交
s 77e3eca 第四次提交

蓝色区域,是每条 commit 前的命令的代码说明

pick:保留该 commit(缩写:p)

reword:保留该 commit,但我需要修改该 commit 的注释(缩写:r)

edit:保留该 commit, 但我要停下来修改该提交(不仅仅修改注释)(缩写:e)

squash:将该 commit 和前一个 commit 合并(缩写:s)

fixup:将该 commit 和前一个 commit 合并,但我不要保留该提交的注释信息(缩写:f)

exec:执行 shell 命令(缩写:x)

drop:我要丢弃该 commit(缩写:d)

:wq 保存退出后,进入备注编辑

03 备注编辑

image-20220407183350736

修改备注,可以修改你想要备注后

image-20220407183533240

:wq提交

04 Git log

image-20220407183646592

可以很清晰看到,2、3、4 提交合并成一条提交了

05 扩展

1
git pull -rebase [repo]

当你和 fork 过来的原仓库产生冲突时,可以使用这个命令,pull 拉取过来的时候,自动帮你 rebase,

如果没有冲突则合并成功,如果产生冲突后,则在IDE消除冲突。

另外, rebase 的底层,先 git reset 在进行 git merge


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!