使用git rebase的正确姿势
Posted TaylorHere
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用git rebase的正确姿势相关的知识,希望对你有一定的参考价值。
使用git rebase的正确姿势
公司的workflow的特点就是每次push到master都要rebase,保持master历史记录是一条线,方便回滚。
所以记录一下rebase的正确使用姿势
git rebase -i 合并历史commit
首先接触git rebase是用来合并历史提交的,情景如下
新建我的分支,开发一个新功能
修改,提交
发现有问题,修改,提交
增加新功能,修改,提交
push到远程
boss:你这个不行,一个功能只能有一个提交
ok
那么rebase -i 就派上用场了,-i参数是指互动interaction
上面情景里,我一共有三次提交,可以查看记录git log
会发现我们的三次提交在最上面,现在我们要把这三个合一
命令这么写
git rebase -i HEAD~3
这个命令中HEAD~3代表了操作最新的三次提交
命令运行后,会在默认编辑器里打开一个文档
类似于
pick 231j2jif312
pick 1231231rr8y32
pick 1233472937413
当然真实文件里还有很多东西,但是这三行才是我们要关注的
这里的231j 这样的东西是某个commit的hash,这三个commit是倒序排列的,最下面的最新,前面的pick的意思是选用这个commit
除了pick命令还有 squash edit一类的命令,他们有不同的作用,详见文档下方(不是指这篇文档)。
我们要关注的就是squash这个命令
这个命令的作用是把一个commit合并到前面那个去,
所以我们要做的事就是把2、3行的pick改为squash,或者s
然后保存,这是便会执行合并操作,接着会有个文档打开让你决定哪些commit说明会被提及。
如果rebase过程中,打算回到操作前状态,可以用rebase –abort命令
接着再看log会发现之前的三commit被合并成一个了。
现在push -f 到远程就不会被boss说了。
boss:ok,你合并到master吧,记得用rebase。
git rebase 重并分支
rebase的真正用途来了
现在我们工作在我的工作分支下,现在我们去到master分支
然后执行git pull
这是可能会遇到conflict
我们要去到对应的文件
conflict标注方式如下
<<<<<<<<<<< commit 1 or head
code 1
==========
cdeo 2
>>>>>>>>>>> commit 2 or somethings else
code 1和cdeo 2发生了冲突,
code 1所在的区域,是你的代码,cdeo 2区域是别的修改,只需删除不需要的代码和标志即可
修改conflict会要求commit,这时commit一下
这是master的代码是最新的,
然后回到工作分支,开始rebase
这时master和我的分支相比,master比我提前了一个分支,但是我需要把我的提交放在master的最后,也就是用master最新的基(base)作为我的提交的基,这便是rebase的功能和名称由来
回到分支后执行一下命令
git rebase master
这是如果遇到冲突,解决完后不要commit,只add就行,接着
git rebase --continue
如果成功合并,查看log会发现我们的commit在最前面,这是我们还要把之前pull时产生的commit合并到我们的commit里面来。完工后回master merge,然后push到远程。
以上是关于使用git rebase的正确姿势的主要内容,如果未能解决你的问题,请参考以下文章