[分支]
master
和
branch2
]只有一行的注释不同:
师父有意见://test 00
branch2有注释://test 99
这是。。。不是没用的,也不是完全用的
充满
信息。当你对什么感兴趣
git merge
好的,每个分支的提示内容是
不
答案的钥匙。更确切地说,它们是必要的,但严重不足。
首先,记住提交包含文件。我想当你说
主人
有X和
鳃2
你真的是说:
提示中的所有文件提交由
主人
和
鳃2
分别是相同的,除了一些文件
f
,其中有一些行
L
其文本不同:该行显示
//test 00
在里面
主人
和
//test 99
在里面
鳃2
.
也就是说,如果我们要绘制提交图,它可能如下所示:
o--o--X <-- master
/
...--o--*
\
o--Y <-- branch2 (HEAD)
(还有其他可能的形状,但是
合并分支
表明这很像。名字
HEAD
附加到
鳃2
因为那是你签过的。)
这里我用过
X
和
Y
表示
提示提交
分支机构
主人
和
鳃2
。因为每个提交都包含它的直接父提交的散列ID,所以我们可以从上一个提交中向后工作。
主人
上一次提交
主人
,从那里到
它的
上一次提交,依此类推。我们也可以从提交开始。
Y
向后移动。当我们同时从
二者都
提交,我们最终会达到一些连接点:提交
*
,而不是一个回合
o
提交。
第一个这样的连接点对于
合并分支
,因为它是
合并基础
. 合并基础是理解
合并分支
会的。
合并的目的是合并工作
,而不是简单地使两个分支相同。为了
结合
工作完成了,吉特必须找出
工作是什么
. 这项工作包括
自公共起点以来所做的所有更改
. 合并基础是共同的起点。
实际上,git现在将运行两个单独的
git diff
命令。一个人将比较提交
*
提交
X
,看看“他们”在分行做了什么
主人
. 另一个将比较提交
*
提交
Y
,看看
你
在你的树枝上,
鳃2
. 即:
git diff --find-renames <hash-of-*> <hash-of-Y> # what did we change, on branch2?
git diff --find-renames <hash-of-*> <hash-of-X> # what did they change, on master?
吉特
组合
这两组更改并将组合的更改应用于commit的内容
*
.
自从你,在
鳃2
很明显,他们做的一切都一样
主人
的确如此,
除了
换行
L
文件的
f
,组合的更改将相同,但此行除外。现在的问题是:
谁改了线?
我们这么说吧
*
,该行显示
/测试00
。然后
你
换了线,所以Git会
你的
改变,结果就是这样
L
文件的
f
将阅读
/测试99
.
但是我们可以这么说
*
,该行显示
/测试99
。然后
他们
换了线,所以Git会
他们的
改变,结果就是这样
L
文件的
f
将阅读
/测试00
.
最后,有可能在
*
,该行完全读取了其他内容。在这种情况下,你和他们都改变了
相同的
直线
相同的
文件,但有两个不同的东西。在这种情况下,
合并分支
会宣布有冲突,会停下来留下你必须清理的烂摊子。由于这种情况没有发生,显然情况并非如此。
检查该文件将告诉您git保留了哪些更改,而这又将告诉您该行在合并基中的外观。或者您可以自己找到合并基,并在该特定提交中检查该文件的版本。但是根据您所告诉我们的,我们无法预测哪一行进入合并提交。