背景

在分支合并可能会涉及很多功能,比如:branch-A可能含有feature-1,feature-2 ... feature-5等5个功能的需求开发,branch-B现在需要合入branch-A的feature-1但是不想合入其他特性需求,即我在分支合并的时候只想合并一分部内容。如果直接git merge的话,会将两个分支的所有内容进行比较合并,会将feature-1... feature-5同时合入branch-B。这显然是我们不想要的。下面要介绍的就是如何在分支合并过程中指定合并内容。

实操

原始合并

我现在有两个分支branch-A,branch-B,我现在需要从将branch-A合入到branch-B已获取branch-A的某些特性或者某些修改。但是,我们发现会有两个冲突文件。其中,只有Node.java是我们想merge into branch-B的内容,那么我们怎么在合入的时候只选定Node.java呢?

部分合并

首先根据branch-B创建一个的临时分支branch-B-tmp(以免影响branch-B)

git checkout -b branch-B-tmp

复制代码然后将branch-A merge into branch-B-tmp,这时候会有冲突,我们解决冲突的时候只需要解决处理我们想要合入的文件的冲突(Node.java),其他文件可以直接accept theirs(或者accept yours,都一样,下面会解释)。需要合入的文件点击merge,处理冲突并选择合入。

处理完成之后,将改动commit到branch-B-temp本地分支

git commit -m "merge branch-A and fix conficts"

复制代码切换到branch-B分支,将branch-B-temp分支的相关文件利用git checkout覆盖到branch-B分支,这时覆盖的文件是已经解决过冲突的。(注意,这里我们只覆盖我们想合入的文件)

git checkout branch-B

git checkout branch-B-tmp path_to_given_file

git checkout branch-B-tmp common\src\main\java\datastructure\Node.java

git status

On branch branch-B

Changes to be committed:

(use "git restore --staged ..." to unstage)

modified: common/src/main/java/datastructure/Node.java

复制代码commit and push需要合入的内容,然后删除临时本地分支branch-B-tmp,这样我们就完成了分支合并中指定合并内容了。

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐