【每天学点小知识】git rebase 的魅力操作

344 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第4天

git rebase 的作用:rebase,变基,可以直接理解为改变基底,将你的当前分支重新设置开始点。它的作用就是对某一段线性提交历史进行编辑、删除、复制、粘贴;

用法汇总:

(1)合并多次提交记录

也就是将多个commit合并为一个完整的commit记录。主要用于几个或几十个小提交合并于主分支的情况,git rebase 更方便管理。

合并最近的 4 次提交纪录

git rebase -i HEAD~4

(2)分支合并

功能类似于 merge 但是不会记录 merge 信息,因为这让 git 的历史记录变得很繁琐。这时我们就可以使用 rebase

(dev) git rebase master

(3) 复制粘贴分支

当我们项目中存在多个分支,有时候我们需要将某一个分支中的一段提交同时应用到其他分支中,比如我们把下图develop分支的C、D、E复制到 master

图片.png

语法:

git rebase   [startpoint]   [endpoint]  --onto  [branchName]

注意[startpoint] [endpoint]为前开后闭要编辑的区间,所以操作的时候起始点要后退一步。

最后因为这一步只是将commit复制到了目标分支上,还需要将git指针指向提交id。

git reset --hard  commitId

总结

注意:

rebase 在执行过程中出现冲突的时候,git 会停止 rebase 并让你去解决冲突,解决完之后可以用 git add 命令去更新内容索引,需要注意的是这里我们无需执行 git commit , 而是执行如下操作:

git rebase --continue

rebase 操作也可以随时停止,并回到rebase开始之前的状态。

git rebase --abort

因为rebase会改变基底,隐藏你真实的修改记录,所以最后呈现出来的 git 历史并不能表现你的真实操作,这点要注意。也因此很多公司会禁用 rebase。

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