今天研究了一下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. Lumen 配置、重写、404错误等

    1.权限是否有设置为777: 2.app key是否有设置: 3.apache下是否有开启重写,a2enmod: 4.nginx下server的location是否配置正确,重写规则有没添加,rout ...

  2. Spring--Bean scope

    singleton, prototype,request, session, global session bean.xml: <?xml version="1.0" enc ...

  3. 【转】Linux 上的最佳 C/C++ IDE

    IDE介绍收藏篇: 个人linux下开发经验不多,一般也都使用shell远程连接使用命令行模式开发.如果自己在自己机器上开发还是有IDE要方便很多,看到这篇帖子就果断的转过来先收藏下,之前自己使用过E ...

  4. IOS软件国际化(本地化Localizable)

    IOS软件国际化(本地化Localizable) iPhone是支持语言最多的手机,它支持各国语言及中国少数名族如蒙古等语言,这也是好多少数名族都用苹果的原因.在这一点上我们自主品牌还是要多学习学习. ...

  5. leangoo

    leangoo网址:https://www.leangoo.com/

  6. 安卓组件-BroadcastReceiver

    [转]http://emilyzhou.blog.51cto.com/3632647/685387 一.BroadcastReceiver的简介 用于异步接收广播Intent,广播Intent的发送是 ...

  7. Button背景图片有拉伸

    1.将图片做成9.png2.用TextView 3.将minHeight, minWidth设为0 4.http://blog.csdn.net/oathevil/article/details/23 ...

  8. 安卓Visibility属性

    可见(visible) XML文件:android:visibility="visible" Java代码:view.setVisibility(View.VISIBLE); 不可 ...

  9. python获取绑定的IP,并动态指定出口IP

    在做采集器的过程中,经常会遇到IP限制的情况,这时候可以通过切换IP能继续访问. 如果是多IP的服务器,那么可以通过切换出口Ip来实现. 1.首先是如何获取服务器绑定的IP import netifa ...

  10. 把windows的bat用好了,也很不错

    taskkill /f /t /im nginx.exe cp2nginx xcopy /e /i /y “D:\workspace\workspace1\aff\WebContent” “D:\ng ...