git--rebase

今天研究了一下git的rebase

rebase中文“变基” ,改变基础(挂载点)的意思

 

最基本的rebase xxx分支:

目前有两个分支:master主分支和newbranch分支。现在位于newbranch上面,log图:

 

 

运行:git rebase master

 

可以看到,该rebase命令把newbranch上的三个commit按顺序加到了master的后面,就好像是从master分支上提交了三个新的commit一样。

注意,虽然之前newbranch里的提交hash值和命令之后不一样,但其中包含的数据是一样的,hash值不一样是因为这已经是新的commit了。

 

 

也可以加- i参数,i代表交互interaction(交互)

这可以指定某几个commit 变基到另一个地方,使用方式: git rebase -i  goWhere

其中goWhere是要rebase去的基点

比如当前仓库分支情况如下图所示:

 

然后如果我们运行git rebase master的话,那么系统会分析当前分支(branch1)和master是从哪个节点开始分开的(本例中显然就是c1),

那么就会把c1之后的branch1分支依次插接到master后面,如图所示:

 

但如果我们不想要这么多commit都被插接过去(现在这里有c2/c3/c4),但如果是正常的开发情况,我们自己的分支至少一天提交一次,开发周期算两周,那就是十几次。我们合到主分支上的时候不希望全部commit都合过去,只需要一个commit就好。

当然我们可以用merge squash,但我们又不希望分支图乱糟糟的。

这时候使用git rebase -i master,然后git会为你自动打开一个vi窗口,你可以选择其中每个commit你要还是不要,要的方式。

 

假设我们有一个feature_x分支。已经commit一个d7322aa。之后我们一直在努力为该功能添加新元素(新的commit),包括CSS中的一些更改。

现在,我们希望将最后三个commit压缩为一个,这样push的时候也不至于太多无用的commit。

我们要怎么做呢?很简单:

git rebase -i HEAD~3

这是我们会发现,我们进入编辑界面,并且显示内容如下:

 

 

这个界面是让我们告诉git该如何处理每个commit。这里我们想保留f392171这个commit,所以我们需要做的就是将以下两个commit合并到第一个上,我们将编辑界面的内容改成这样即可:

 

 

ok了,接下来esc,:wq保存即可了。

注意:不要合并已经push的commit……

 

posted @ 2020-08-20 11:53  NeoZy  阅读(361)  评论(0编辑  收藏  举报