git小技巧--如何从其余分支merge个别文件或文件夹

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

建立分支

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

A上面有个列表页功能html

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

产品经理说先上列表功能,因而咱们就开发A分支,列表功能很快开发完成。工具

次日按常理开发B分支,开发到一半,产品经理说目前的系统消息功能须要急着上线,要和列表功能一块儿上线,当时就懵逼了,而后赶忙放下详情页的开发,立马去开发系统消息功能,开发完以后须要将列表功能和系统消息功能放在一个分支上提测,这时候分支合并就派上用场了。htm

合并分支

使用git merge 命令进行分支合并是通用的作法,可是git merge 合并的时候会将两个分支的内容彻底合并,若是想合并一部分确定是不行的。那怎么办?blog

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

git checkout source_branch <path>...产品

强制合并

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

$ 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
#
相关文章
相关标签/搜索