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
第一次提交
|
使用后:
| 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
| git rebase -i [startpoint] [endpoint]
|
| 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 扩展
| git pull -rebase [repo]
|
当你和 fork 过来的原仓库产生冲突时,可以使用这个命令,pull
拉取过来的时候,自动帮你 rebase
,
如果没有冲突则合并成功,如果产生冲突后,则在IDE
消除冲突。
另外, rebase
的底层,先 git reset
在进行 git merge