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
#
    

ok,完结,这是工作中使用git合并总结的经验,仅供参考,有错误请指出,谢谢!

`git branch --ff-only merge` 不是一个有效的 Git 命令。请注意,`--ff-only` 和 `merge` 是独立的选项和指令。 `git branch --ff-only` 是一个用于检查当前分支是否可以进行快进合并(fast-forward merge)的命令。快进合并是指将一个分支的提交历史直接应用到另一个分支上,而不会创建新的合并提交。如果使用 `git branch --ff-only` 检查当前分支时,结果为成功,则说明当前分支可以进行快进合并。 另一方面,`merge` 是一个用于将一个分支的更改合并到当前分支的命令。可以使用 `git merge <branch>` 来执行合并操作,其中 `<branch>` 是要合并的分支名称。 因此,如果你想将一个分支(例如 "merge" 分支)的更改合并到当前分支,并且只在快进合并可行时才进行合并,可以按照以下步骤操作: 1. 首先,确保你在要合并更改的目标分支上。你可以使用 `git checkout <target_branch>` 命令切换到目标分支。 2. 然后,运行 `git branch --ff-only` 命令来检查是否可以进行快进合并。 3. 如果 `git branch --ff-only` 命令返回成功,即当前分支可以进行快进合并,则运行 `git merge merge` 命令来将 "merge" 分支的更改合并到当前分支。 需要注意的是,合并操作可能会导致合并提交的生成,特别是当两个分支之间存在分叉点时。只有在可以进行快进合并的情况下,才会执行无合并提交的快进合并。否则,将创建一个新的合并提交来合并两个分支的更改。 总结起来,`git branch --ff-only` 是用于检查当前分支是否可以进行快进合并的命令,而 `git merge <branch>` 是用于将一个分支的更改合并到当前分支的命令。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值