zoukankan      html  css  js  c++  java
  • git分支管理(3)-fast forward和no fast forward

    一、fast forward

    假设当前只有一个master主分支,最新节点为c1
    创建并切换到新的分支dev后
    一直在dev分支工作 最新节点为c9
    若mater在dev被创建后一直停留在c1节点
    则此时将dev直接合并到master
    即直接将c9节点作为master的最新节点 就称为 fast forward

    下面举例说明:
    创建并切换到dev分支

    $ git branch dev
    
    $ git checkout dev
    Switched to branch 'dev'
    

    在dev分支上修改file.txt文件的最后一行为:

    this is edited on next week by dev.
    

    提交到dev分支上:

    $ git add .
    
    $ git commit -m '作者dev再次修改了file文件'
    [dev a904023] 作者dev再次修改了file文件
     1 file changed, 2 insertions(+), 1 deletion(-)
    

    切换回master分支,并使用 git diff 查看两个分支上的差异

    $ git switch master
    Switched to branch 'master'
    
    $ git diff dev
    diff --git a/file.txt b/file.txt
    index 3242f46..c526c48 100644
    --- a/file.txt
    +++ b/file.txt
    @@ -1,6 +1,5 @@
     aaa
     bbb
     ccc
    -this is edited on next week by dev.
    -
    +this is edited on weekend.
    

    将dev分支合并到master上

    $ git merge dev
    Updating f0cc575..a904023
    Fast-forward
     file.txt | 3 ++-
     1 file changed, 2 insertions(+), 1 deletion(-)
    

    注意到:此时的合并即为fast forward模式
    合并之后的视图是扁平化的 看不出dev分支的历史信息

    $ git log --graph --pretty=oneline --abbrev-commit
    * a904023 (HEAD -> master) 作者dev再次修改了file文件
    *   f0cc575 修复了file文件中的冲突
    |
    | * 5fe7b14 作者dev修改了file文件
    * | e5c70e0 作者master修改了file文件
    |/
    * 4c25416 提交了file文件
    

    二、no fast forward

    删除dev分支后,我们再用一个新的分支dev2来说明 no fast forward
    创建并切换到dev2分支

    $ git checkout -b dev2
    Switched to a new branch 'dev2'
    

    修改文件file.txt最后一行为

    this is edited on next weekend by dev2.
    

    提交到dev2分支上

    $ git add .
    
    $ git commit -m '作者dev2修改了file文件'
    [dev2 f27684b] 作者dev2修改了file文件
     1 file changed, 1 insertion(+), 1 deletion(-)
    

    切换回master分支后,用 --no-ff 模式将dev2合并到master上

    $ git switch master
    Switched to branch 'master'
    
    $ git merge --no-ff -m '将dev2合并到master分支上'  dev2
    Merge made by the 'recursive' strategy.
     file.txt | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    

    删除dev2分支后,查看提交日志

    $ git log --graph --pretty=oneline --abbrev-commit
    *   d6433aa (HEAD -> master) 将dev2合并到master分支上
    |
    | * f27684b 作者dev2修改了file文件
    |/
    * a904023 作者dev再次修改了file文件
    *   f0cc575 修复了file文件中的冲突
    |
    | * 5fe7b14 作者dev修改了file文件
    * | e5c70e0 作者master修改了file文件
    |/
    * 4c25416 提交了file文件
    

    可以看到,使用 --no-ff的合并会多生成一个提交记录
    并保留dev2分支的历史信息 ,有效维持了提交链的完整性

    下面这张图可以形象地说明两种模式之间的差别:
    image.png

  • 相关阅读:
    linux文件权限查看及修改(实用)
    将JSON对象带有格式的写出到文件中
    mySQL数据库Sql语句执行效率检查--Explain命令
    mysql优化
    Linux-设置固定IP
    logback 配置详解(二)——appender
    logback 配置详解(一)——logger、root
    Thread
    Singleton
    多线程编程总结
  • 原文地址:https://www.cnblogs.com/baebae996/p/12971067.html
Copyright © 2011-2022 走看看