现在我们有一个主分支dev,现在有一些feature分支,需要偶尔将dev分支的稳定代码合入feature分支,所以用到git merge

现在整理下git merge的几个概念和用法

 

Fast forward 

https://blog.csdn.net/qq_25800311/article/details/81986263

当前分支合并到另一分支时,如果没有分歧解决,就会直接移动文件指针。这个过程叫做fastforward

举例来说,开发一直在master分支进行,但忽然有一个新的想法,于是新建了一个develop的分支,并在其上进行一系列提交,完成时,回到 master分支,此时,master分支在创建develop分支之后并未产生任何新的commit。此时的合并就叫fast forward。

1、git merge dev

是将dev的分支合并到当前分支,应该默认是fast forward模式

2、git merge dev --no-ff

https://blog.csdn.net/qq_39416311/article/details/81264792

--no-ff指的是强行关闭fast-forward方式。

ast-forward方式就是当条件允许的时候,git直接把HEAD指针指向合并分支的头,完成合并。属于“快进方式”,不过这种情况如果删除分支,则会丢失分支信息。因为在这个过程中没有创建commit

3、git merge dev --squash

是用来把一些不必要commit进行压缩,比如说,你的feature在开发的时候写的commit很乱,那么我们合并的时候不希望把这些历史commit带过来,于是使用--squash进行合并,此时文件已经同合并后一样了,但不移动HEAD,不提交。需要进行一次额外的commit来“总结”一下,然后完成最终的合并

 

Gerrit

1、--no-ff  合并后生成的一个commit如果push到gerrit不是一个单独的change,无法通过cherry-pick下载合并

     在gerrit的change格式是:http://git.****.com/#/c/767312/-1..6

 

     

2、--squash 是生成一个单独的commit,一个单独的change,可以通过cherry-pick下载并合并到本地

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐