谈谈对git rebase的理解
gIt rebase 的三种作用
1.拉代码rebase
2.合并分支rebase
3.处理commit提交记录
1.拉取代码rebase
正常我们在拉取远程代码时使用 git pull
git pull === git fetch + giet merge 是使用fast-forwad模式,如果出现冲突后,解决冲突且重新提交记录,则会出现分支错乱的问题,
输入命令查看log记录 git log --graph --pretty=oneline --abbrev-commit
强迫症的同学一定会受不了,因此出现git pull --rebase
git pull --rebase === get fetch + git rebase
如上图,当使用git pull --rebase 出现冲突
则先解决冲突后 再
git add .
git rebase --continue
此刻,当前commit提交记录就变成一条线了。注意之后若重新提交则需要 git push -f 即为强制提交替换远程commit记录。
2.合并分支rebase
当你接到需求后从master分支切出dev分支,然后dev分支开发完成后需要先切回master分支,git pull --rebase 拉取最新的代码,再切回dev分支,这时候你需要先合并master的最新代码,正常git merge 后会出现commit提交错乱,如下图
这样就会让人感觉强迫症犯了。
因此,我们可以是用git rebase来合并,如上述,不使用git merge master, 使用git rebase master 后记录如下图
可以看到,master和dev将基线以后的commit进行了排序,变基的dev分支在前面,合并的master修改commit再后。 最后提交git push -f。 注意需要需要强制提交,因为变基后的dev和远程的dev commit记录顺序不一致。
3.处理commit提交记录
当我们需要处理commit记录时, 可以使用git rebase -i对分支记录操作, 常见的如删除,合并多个commit
执行git rebase -i head~3, 即前三次提交记录,如下图,执行后进入vim编辑器,将对应的commit前面的pick改为drop即为删除,squash为合并。
当使用git rebase -i修改后发现修改内容有误,想恢复修改之前的可以 执行 git rebase --abort 来恢复