Git中两个分支部分合并问题

前言

在平时的工作中我们可能会遇到一种情况就是需要分支文件的部分合并,这里做一个小记录。

正文

创建一个文件夹 testmerge,执行 git init 初始化仓库,然后新建一个文件 file1.txt写入内容ABCD,新建一个文件 file2.txt 写入内容EFGH.

mkdir testmerge
git init
touch file1.txt
touch file2.txt
vim file1.txt
#写入 ABCD 
vim file2.txt
#写入 EFGH
git add .
git commit -m "add two file"

新建一个分支 b2 并切换到该分支,修改文件 file1.txtfile2.txt 的内容如下:

git branch b2
git checkout b2
vim file1.txt
#写入 ABCD1234
vim file2.txt
#写入 EFGH5678
git add .
git commit -m "change two file"

提醒一下:上面代码的1行和2行可以合并简写成 git checkout -b b2

然后我们切换到master分支:

git checkout master

假设我们只想把 b2 分支的 file1 合并到master分支,可以这样操作:

git checkout b2 file1
git commit -m "merge file1"

这样一般情况下问题可以得到解决,但是假如我们的分支master也修改过file1, 这个时候就会将master修改的内容覆盖掉,这个时候我们就需要创建一个临时分支来合并。

git checkout master
vim file1.txt
# 修改分支master的file1内容为ABCD1234####
git commit -m "change file1"

git checkout b2
vim file1.txt
# 修改分支b2的file2内容为ABCD1234****
git commit -m "change file1"

在master分支创建一个b3分支,然后将b2分支合并到b3.

git branch b3
git checkout b3
git merge b2

你会发现出现了冲突,如下:

<<<<<<< HEAD
ABCD1234####
=======
ABCD1234****
>>>>>>> b2

然后解决冲突后,将b3分支的对应file1文件合并到master分支。

git checkout master
git merge b3