git中的不同分支下的同一文件,到底怎么样才能算作是冲突?
我想大声告诉你
我想大声告诉你 2017-05-02 09:47:39
0
3
755

比如有两个分支,masterdevelop。针对1.txt文件,

master分支
222
3333 66
555

develop分支
222
4444 77
888

先是有master,然后我创建了develop分支,然后再在develop分支下修改了1.txt,然后add和commit,然后切换回master分支,然后merge,就只报66和77冲突,别的两个地方不报冲突

为什么只有66和77那会产生冲突。而4444与3333,还有555和888不冲突呢?不明白

看上图,在master分支是555555,在dev我改成了5445,然后add commit,然后切换回master分支,merge,没有冲突,最后合并为了5445,是不是你说的情况?

我想大声告诉你
我想大声告诉你

全部回复(3)
巴扎黑

是否出现 Conflicts(冲突),取决于 commit 修改先后顺序

楼上朋友提到了自动合并,也就是不会产生冲突的情况,举个例子:
master 上面,你有一个 commit,内容是 "1234"

这时候你在 master 基础上创建了新的 branch,叫 develop,那么这个 develop branch 上面也有内容为 "1234" 的那个commit

然后你提交了新的 commit,把 "1234" 变成了 "1234 666",那这个时候你 merge,就不会有冲突


再举个例子,会产生冲突的情况:

master 里面有一个 commit,内容是 "1234"master 里面有一个 commit,内容是 "1234"
你在这个 commit 之后创建了新的 branch,叫 develop。那这个时候你的 develop

你在这个 commit 之后创建了新的 branch

,叫 develop。那这个时候你的 develop branch 里有第一个 commit,内容为 "1234"develop 里面,提交了一个 commit,内容是 "1234 777"
在这期间,你的 master 更新了,你的同事或者朋友,或者你自己,在 master 然后你在 develop 里面,提交了一个 commit,内容是 "1234 777"

在这期间,你的 master 更新了,你的同事或者朋友,或者你自己,在 master 上提交了一个新的 commit,把它更新成了 "1234 666"


这时候你再 merge,就会有冲突了,因为 git 发现这两个 branch 有个共同的祖先(ancestor),也就是那个 "1234",但 git 并不知道你现在合并,到底是要 "666" 还是 "777"

回到你的问题,建议你先看下你两个 branch 的 commit 历史纪录,对比一下。看能不能找到类似这样的情况,也就是两个 branch 有一个共同的 commit 作为起始点(ancestor),但之后的 commit 出现了分歧(pert)🎜 🎜如果还是不能解释你的问题,方便的话发一下你这个的 github 的地址🎜
给我你的怀抱

因为还有自动合并啊。你是在手动合并分支时看到冲突的吗?

洪涛

试过发现不行,下面是原答案。

都是我的。

一开始master类似这样:

222
3333 22
555

然后你fork了一个develop,修改成这样:

222
4444 77
888

这个时候,develop是可以直接合并会master的,没冲突,因为develop在master后,是对master的修改。

但是你没合并develop,而是改了master:

222
3333 66
555

这时66和77那里就冲突了。因为git知道develop里的4444是从3333改的,888是从555改的,现在的master那个位置还是有3333和555。但是77本来是从22改的,但是现在master的22那里变成66,就有了两个冲突的修改,git就不能把77合并到66那里了。

或者说本来master和develop是一条线上的,但是你改了master,这个新的master就和原来的develop不在同一条线上了。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板