合并子模块时有三个提交引用

时间:2016-12-14 20:02:21

标签: git git-merge git-submodules

我正在合并使用git子模块的项目中的分支。通常在发生冲突时,有两组变更,即他们和我们的变更。解决冲突是将这两者合并为一体。但是我注意到对于git子模块,diff显示了第三个值:

diff --cc my_submodule
index dd7404e,e6753b1..0000000
--- a/my_submodule
+++ b/my_submodule
@@@ -1,1 -1,1 +1,1 @@@
- Subproject commit dd7404e5f35ee0b0064f0d6ed8201cc39d6ed6b2
 -Subproject commit e6753b1142cf0350608720ff23f7ecf51b813cd9
++Subproject commit 3b4e75fbb7c55cf21e19509bbbbfabfa1fc10630

“ - ”,“ - ”和“++”是什么意思?

请注意,在合并之前,子模块版本可能实际上已在存储库中检出,这既不是他们的也不是我们的,这会解释三个哈希值吗?

1 个答案:

答案 0 :(得分:1)

这只是意味着子模块 gitlink special entry in the index of the parent repo)在源和目的地中都已更改
(见git diff man page

++表示添加的一行未出现在branch1或branch2

来自Git Tools - Advanced Merging

你有三个SHA1,因为在冲突中,Git将所有这些版本存储在“阶段”下的索引中,每个阶段都有与之关联的数字。

  • 第1阶段是共同的祖先,
  • 第2阶段是您的版本
  • 第3阶段来自MERGE_HEAD,您正在合并的版本(“他们的”)。

combined diff format 部分包含所有详细信息:

  

git diff-files -c(合并文件的组合差异)显示时,它将两个未解析的合并父项与工作树文件进行比较

     

即。

     
      
  • file1是第2阶段,也就是“我们的版本”,
  •   
  • file2是第3阶段,也就是“他们的版本”。
  •   
     

-列中的N字符表示该行显示在fileN中,但未显示在结果中。
  列+中的N字符表示该行显示在结果中,fileN没有该行“。

在你的情况下:

  • 第一列中的-表示file1,表示第2阶段,表示“我们的”版本。
  • 第二列中的-表示file2,表示第3阶段,表示“他们的”。
  • ++”表示不在file12的加法(每次与第1阶段的共同祖先比较时)