merge 分支冲突
今天的情况是这样, 想象不仅有人在做开发版 dev
的更新, 还有人在修改 master
中的一些 bug. 当我们再 merge dev
的时候, 冲突就来了. 因为 git 不知道应该怎么处理 merge
时, 在 master
和 dev
的不同修改.
当创建了一个分支后, 我们同时对两个分支都进行了修改.
比如在:
-
master
中的1.py
加上# edited in master
. -
dev
中的1.py
加上# edited in dev
.
在下面可以看出在 master
和 dev
中不同的 commit
:
# 这是 master 的 log
* 3d7796e change 4 in master # 这一条 commit 和 dev 的不一样
* 47f167e back to change 1 and add comment for 1.py
* 904e1ba change 2
* c6762a1 change 1
* 13be9a7 create 1.py
-----------------------------
# 这是 dev 的 log
* f7d2e3a change 3 in dev # 这一条 commit 和 master 的不一样
* 47f167e back to change 1 and add comment for 1.py
* 904e1ba change 2
* c6762a1 change 1
* 13be9a7 create 1.py
当我们想要 merge
dev
到 master
的时候:
$ git branch
dev
* master
-------------------------
$ git merge dev
# 输出
Auto-merging 1.py
CONFLICT (content): Merge conflict in 1.py
Automatic merge failed; fix conflicts and then commit the result.
git 发现的我们的 1.py
在 master
和 dev
上的版本是不同的, 所以提示 merge
有冲突. 具体的冲突, git 已经帮我们标记出来, 我们打开 1.py
就能看到:
a = 1
# I went back to change 1
<<<<<<< HEAD
# edited in master
=======
# edited in dev
>>>>>>> dev
所以我们只要在 1.py
中手动合并一下两者的不同就 OK 啦. 我们将当前 HEAD
(也就是master
) 中的描述 和 dev
中的描述合并一下.
a = 1
# I went back to change 1
# edited in master and dev
然后再 commit
现在的文件, 冲突就解决啦.
$ git commit -am "solve conflict"
再来看看 master
的 log
:
$ git log --oneline --graph
# 输出
* 7810065 solve conflict
|\
| * f7d2e3a change 3 in dev
* | 3d7796e change 4 in master
|/
* 47f167e back to change 1 and add comment for 1.py
* 904e1ba change 2
* c6762a1 change 1
* 13be9a7 create 1.py
回到这张图, 他也诠释了两个分支都有更改的时候的样子, 在这种情况下 merge
, 我们就要使用上述的流程.