git进阶之--merge的5种策略

原创 2017年01月03日 16:45:20

用了这么久的git,其中很长一段时间都是属于,瞎几把乱用。对于git merge这些东西用的也是只知道个大概。同事最近给我们安利了一发git merge的侧率,大开眼界,记录一发。

上网百度了一下git策略,在网上,大多数的git侧率都是只有3种的。这次我所要记录的,是5种策略。

常规合并里分为三种:

解决(Resolve)
递归(Recursive)
章鱼(Octopus)

非常规两种:

我们的(Ours)
子树(Subtree)

在看策略之前,我们先看看关于merge在做处理时候的参数
主要分为三种:

--ff  --ff--only  快速合并    只快速合并(如果有冲突就失败)
--no-ff   非快速合并
--squash  将合并过来的分支的所有不同的提交,当做一次提交,提交过来

--ff和--no-ff的区别是,当解决完冲突后,no-ff会生成一次commit
eg: Merge branch 'suit' into master

好的现在来详细的看一看各种策略

首先看一下最基本的
**解决(Resolve)**:
这种策略只能合并两个分支,首先定义某个次commit为祖先为合并基础,然后执行一个直接的三方合并

**递归(Recursive)**:
和解决很相似,说白了就是多次的调用解决。为什么会有这个策略呢?因为解决策略,是找到两个分支的某个commit为组向才来合并的,如果某一个分支上,某一次提交(祖先或者祖先以后的提交)是merge过的,这时候,就需要递归来解决了。

**章鱼(Octopus)**:
当需要多个分支的时候,就可以用octopus来解决,这就是来同时合并多个分支的策略。

再看看特殊的策略
**我们的(Ours)**:
这是一个很奇怪的策略,我感觉没啥用,不知道其用途是如何
它的作用是,将另外一个分支的commit记录(log)提交过来,但是不提交文件本身。

**子树(Subtree)**:
这种策略是在用于,当想将一个新的项目作为该项目的子项目往git上提交时可以使用,说白了就是将其当做一个子模块一般。
版权声明:本文为博主原创文章,未经博主允许不得转载。

Git中的merge命令实现和工作方式

想象一下有如下情形:代码库中存在两个分支,并且每个分支都进行了修改,最后你想要将其中的一个分支合并到其他的分支中。 那么要问合并的处理过程是怎么样的呢?Git是对每个分支,依据分支的历史数据按照序列...
  • jxusthusiwen
  • jxusthusiwen
  • 2014年09月17日 22:38
  • 23850

Git merge 策略

一、Fast Forward,No Fast Forward 和 Squash的对比 1.fast forward 假设从master分支有三个节点C1,C2,C3 从C3切出develop分支...
  • zxk15982106569
  • zxk15982106569
  • 2016年01月21日 14:32
  • 506

Git 版本合并策略

git支持很多种工作流程,我们采用的一般是这样,远程创建一个主分支,本地每人创建功能分支,日常工作流程如下: 去自己的工作分支 $ git checkout work 工作 .... ...
  • ksgt00016758
  • ksgt00016758
  • 2014年08月29日 15:52
  • 3870

git-merge完全解析

主要是看他的Merge细节部分,讲的很好 Git的git-merge是在Git中频繁使用的一个命令,很多人都觉得git合并是一个非常麻烦的事情,一不小心就会遇到丢...
  • T3
  • T3
  • 2017年08月10日 18:08
  • 1090

git merge原理

快照 这是项目的三个版本,版本1中有两个文件A和B,然后修改了A,变成了A1,形成了版本2,接着又修改了B变为B1,形成了版本3。 如果我们把项目的每个版本都保存到本地仓库,需要保存至...
  • a409051987
  • a409051987
  • 2017年04月24日 21:57
  • 1258

Git 工具 - 子模块 submodule

7.11 Git 工具 - 子模块 子模块 有种情况我们经常会遇到:某个工作中的项目需要包含并使用另一个项目。 也许是第三方库,或者你独立开发的,用于多个父项目的库。 现在问题来了:你想要把它们当...
  • iamoyjj
  • iamoyjj
  • 2017年05月08日 10:15
  • 4907

git merge之squash merge 看日志

看CM源码时,发现历史记录里有很多squash,于是google了解了一下。 Git相对于CVS和SVN的一大好处就是merge非常方便,只要指出branch的名字就好了,如: 1 2 3...
  • helllochun
  • helllochun
  • 2015年09月14日 15:47
  • 876

理解Git——Merging(合并)

1、合并     你在一个分支上完成了一个新的功能之后,你像把那个新功能添加到主分支,以便其他的人都可以使用。你可以通过git merge或者git pull命令来实现。     这两个命令的语法是:...
  • lixiaokang_cool
  • lixiaokang_cool
  • 2013年11月11日 16:33
  • 30479

Git merge 合并分区详解

git merge 用来做分支合并,将其他分支中的内容合并到当前分支中。比如分支结构如下: master ...
  • self001
  • self001
  • 2012年03月06日 15:44
  • 82375

git merge简介

git merge的基本用法为把一个分支或或某个commit的修改合并现在的分支上。 我们可以运行git merge -h查看其命令 usage: git merge [options] [...] ...
  • hudashi
  • hudashi
  • 2012年06月14日 20:35
  • 233145
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:git进阶之--merge的5种策略
举报原因:
原因补充:

(最多只允许输入30个字)