今天研究了一下git merge命令常用参数,并分别用简单的例子实验了一下,整理如下:

输入git merge -h可以查看相关参数:

--ff  快速合并,这个是默认的参数。如果合并过程出现冲突,Git会显示出冲突等待手动解决或者abort此次merge

--ff-only  只有能快速合并的情况才合并。如果合并过程出现冲突,Git会自动abort此次merge

--no-ff  不使用快速合并。会生成一次新的提交记录,这个记录只是标识在这里进行了一次merge操作

--squash  压缩合并。将待合并的分支的内容压缩成一个新的提交合并进来

接下来举例说明,C代表一次提交,合并时都是将dev分支合并到master。

第一种情况:master分支切出dev分支后没有新的提交,也就是说只有dev分支有更新,可以快速合并:

eg:master:C1 ← C2

           ↑

  dev:       C3 ← C4

  1.执行:git merge --ff dev

  master:C1 ← C2 ← C3 ← C4

  dev:C1 ← C2 ← C3 ←C4

  查看git log时master分支会看到dev分支上的所有提交,此时master和dev是一样的

  2.执行:git merge --ff-only dev

  结果同上。

  3.执行:git merge --no-ff dev

  git会提示让你输入此次合并的信息,然后生成一个特殊的commit。

  master:C1 ← C2 ← C3 ← C4 ← C5 (Merge branch 'dev')

  dev:C1 ← C2 ← C3 ←C4

  4.执行:git merge --squash dev

  master:C1 ← C2 ← C5 (Merge branch 'dev')

  dev:C1 ← C2 ← C3 ←C4

第二种情况,切出后master和dev分支均有更新,这种情况是最常见的。这里为了演示冲突,在C4和C5分别对一个文件进行了修改。

eg:master:C1 ← C2 ← C4

           ↑

  dev:       C3 ← C5

  1.执行:git merge --ff dev

  这时Git会告诉你产生了冲突并列出冲突的文件,查看文件时会列出具体冲突内容,这时要先解决冲突(如果使用Intellij Idea或Eclipse等工具,可以直接选择use ours/theirs,ours代表被合并分支即master,theirs代表合并分支即dev),然后将这些修改的部分提交,再执行merge操作。

  master:C1 ← C2 ← C3 ← C5 ← C4 ← C6 (解决冲突的那次提交)

  dev:C1 ← C2 ← C3 ←C5

  那么问题来了,Git是如何知道两个文件有冲突呢?下篇文章详细说明。

  2.执行:git merge --ff-only dev

  这时Git会检测到产生了冲突,所以提示:Not possible to fast-forward, aborting.    即取消这次merge操作。

  3.执行:git merge --no-ff dev

  结果同1,不过这里在解决了冲突执行commit操作后不用再进行merge操作了。如果再执行merge操作,它会提示:Already up-to-date.

  4.执行:git merge --squash dev

  master:C1 ← C2 ← C4 ← C6 (解决冲突的那次提交)

  dev:C1 ← C2 ← C3 ←C5

  这里解决了冲突并提交之后也不用再执行merge操作了。如果再执行merge操作会有两种情况:

  a.刚才解决冲突时选用了master分支的修改,那么还是会提示有冲突需要解决。

  b.刚才解决冲突时选用了dev分支的修改,那么会提示Already up-to-date。

  对比发现,使用--squash参数时,如果有冲突,解决完冲突后只要两个分支不完全一样,再执行git merge --squash时还是会进行merge。但--no-ff就不会。

  

Git合并分支命令:git merge --ff的更多相关文章

  1. Git合并分支命令参数详解:git merge --ff

    今天研究了一下git merge命令常用参数,并分别用简单的例子实验了一下,整理如下: 输入命令git merge -h可以查看相关参数: --ff  快速合并,这个是默认的参数.如果合并过程出现冲突 ...

  2. git合并分支理解和常用命令的总结

    原文参考:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 工作区和暂存区 工作区 ...

  3. git 合并分支到master

    git 合并分支到master   假如我们现在在dev分支上,刚开发完项目,执行了下列命令 git add .git commit -m ‘dev'git push -u origin dev 然后 ...

  4. 用git合并分支时,如何保持某些文件不被合并

    用git合并分支时,如何保持某些文件不被合并_fkaking的专栏-CSDN博客_git 合并分支 https://blog.csdn.net/fkaking/article/details/4495 ...

  5. 【Git版本控制】Git的merge合并分支命令

    1.实例 git checkout master git merge dev merge合并分支只对当前分支master产生影响,被合并的分支dev不受影响. 假设你有两个分支,“stable” 和 ...

  6. git之合并分支(git merge)------(三)

    最近几天写小demo,总是自己拉取他人的代码,然后创建分支,在自己的分支上进行修改,然后提交到自己的分支,具体的这一步,我就不多讲了,因为在我的博客“工作中常用的Git操作”中有详细的介绍,今天主要讲 ...

  7. git 合并分支 git merge branch_name

    * 查看分支 git branch * 更新 git pull * 切换到master分支 git checkout master Checking out files: 100% (907/907) ...

  8. Git合并分支出现的冲突解决

    人生不如意之事十有八九,合并分支往往也不是一帆风顺的. 我们准备新的分支newbranch. LV@LV-PC MINGW32 /c/gitskill (master)$ git checkout - ...

  9. Git合并分支或者冲突

     假设冲突文件是 test/TestCase.php  下面分5种情况讨论. 1.本地不变.   然后远程别人有更新.   git pull   这种最简单,没有冲突,本地工作区直接更新   2.我本 ...

随机推荐

  1. python数据类型之 dict(map)

    字典  一.创建字典  方法①:  >>> dict1 = {}  >>> dict2 = {'name': 'earth', 'port': 80}  >& ...

  2. LPC1768的SPI通讯

    SPI是一种全双工串行接口,可处理多个连接到指定总线上的主机和从机.在数据传输过程中总线上只能有一个主机和一个从机通信.在数据传输中,主机总是会向从机发送一帧8到16个位的数据,而从机也总会向主机发送 ...

  3. UVA - 208 Firetruck(消防车)(并查集+回溯)

    题意:输入着火点n,求结点1到结点n的所有路径,按字典序输出,要求结点不能重复经过. 分析:用并查集事先判断结点1是否可以到达结点k,否则会超时.dfs即可. #pragma comment(link ...

  4. 10天学会phpWeChat——第八天:Form类,丰富表单提交的字段类型

    通过前面七讲的系列教程,我们完成了一个包含后台并自适应PC+h5移动端的文章管理模块. 在实际的生产环境中,文章投稿.商品上传等操作并不会简单局限于一个text和textarea组成的表单.在实际中, ...

  5. displayport-2

    上一章讲述了display-port的硬件连接,今天来说说协议层 图中可以看到,最底层是物理层,上层是连接服务层,提供的服务包括同步数据传输服务,aux链接服务,aux设备数据传输服务,在设备端也一样 ...

  6. ios 计算字符串长度<转>

    - (int)textLength:(NSString *)text//计算字符串长度 {     float number = 0.0;     for (int index = 0; index ...

  7. Xcode各版本官方下载

    官方下载, 用开发者账户登录,建议用Safari浏览器下载. 官方下载地址: https://developer.apple.com/xcode/downloads/ Xcode 66.4: http ...

  8. a标签屏蔽href跳转

    原文地址: http://blog.163.com/huang_qy/blog/static/615601452012101411625600/ 推荐的写法: a href="javascr ...

  9. java系列-JDBC的封装

    参考:http://blog.csdn.net/liuhenghui5201/article/details/16369773 一. 1.加载驱动-->>封装    --->> ...

  10. Python3基础 setdefault() 根据键查找值,找不到键会添加

    镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...