zoukankan      html  css  js  c++  java
  • git小技巧--如何从其他分支merge个别文件或文件夹

    在实际工作中,一个大型的项目或版本迭代可能不是一次上线,可能会分好几次上线,这时候就会涉及创建多个分支,进行分别开发。

    创建分支

    功能分为2个分支,分别为A、B。

    A上面有个列表页功能

    B上面有个详情页功能,还有个系统消息功能

    产品经理说先上列表功能,于是我们就开发A分支,列表功能很快开发完成。

    第二天按常理开发B分支,开发到一半,产品经理说目前的系统消息功能需要急着上线,要和列表功能一起上线,当时就懵逼了,然后赶紧放下详情页的开发,立马去开发系统消息功能,开发完之后需要将列表功能和系统消息功能放在一个分支上提测,这时候分支合并就派上用场了。

    合并分支

    使用git merge 命令进行分支合并是通用的做法,但是git merge 合并的时候会将两个分支的内容完全合并,如果想合并一部分肯定是不行的。那怎么办?

    如何从其他分支merge指定文件到当前分支,git checkout 是个合适的工具。

    git checkout source_branch <path>...

    强制合并

    我们使用git checkout 将B分支上的系统消息功能添加到A分支上

    $ git branch
      * A  
        B
        
    $ git checkout B message.html message.css message.js other.js
    
    $ git status
    # On branch A
    # Changes to be committed:
    #   (use "git reset HEAD <file>..." to unstage)
    #
    #    new file:   message.css
    #    new file:   message.html
    #    new file:   message.js
    #    modified:   other.js
    #
    

    合并完成

    注意:在使用git checkout某文件到当前分支时,会将当前分支的对应文件强行覆盖

    这里新增文件没问题,但是A分支上原有的other.js会被强行覆盖,如果A分支上的other.js有修改,在checkout的时候就会将other.js内容强行覆盖,这样肯定是不行的。如何避免不强制覆盖,往下看。

    智能合并

    1.使用git checkout 将根据A分支创建一个A_temp分支,避免影响A分支

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

    2.将B分支合并到A_temp分支

    $ git merge B
    Updating 1f73596..04627b5
    Fast-forward
     message.css                     | 0
     message.html                    | 0
     message.js                      | 0
     other.js                        | 1 +
     4 files changed, 1 insertion(+)
     create mode 100644 message.css
     create mode 100644 message.html
     create mode 100644 message.js
    

    3.切换到A分支,并使用git checkout 将A_temp分支上的系统消息功能相关文件或文件夹覆盖到A分支

    $ git checkout A
    Switched to branch 'A'
    
    $ git checkout A_temp message.html message.css message.js other.js
    
    $ git status
    # On branch A
    # Changes to be committed:
    #   (use "git reset HEAD <file>..." to unstage)
    #
    #    new file:   message.css
    #    new file:   message.html
    #    new file:   message.js
    #    modified:   other.js
    #
    
  • 相关阅读:
    ASP.NET MVC 视图
    ASP.NET MVC 控制器
    ASP.NET MVC 入门
    SQL 兼容性设置
    this template attempted to load component assembly 'NuGet.VsiualStudio.interop,version=1.0.0.0 culture=neutral publickeytoken=0000000'. 解决方案
    SQL 时间函数
    [原创]PageOffice+MobOffice 电脑、移动跨平台Office文档在线流转解决方案
    [原创]Java调用PageOffice给Word中的Table赋值
    [原创]Java调用PageOffice在线打开数据库中保存的Word文件
    [原创]新版PageOffice V4.0为什么用弹出窗口的方式打开文件?
  • 原文地址:https://www.cnblogs.com/-mrl/p/6648668.html
Copyright © 2011-2022 走看看