使用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的正确姿势的主要内容,如果未能解决你的问题,请参考以下文章

使用git rebase的正确姿势

GIT使用rebase和merge的正确姿势

GitGIT使用rebase和merge的正确姿势

Git 提交的正确姿势

git 通过rebase的方式 提交代码

git rebase合并同一个分支的多个提交