一起养成写作习惯!这是我参与「掘金日新计划 · 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
语法:
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)