I am merging a branch in a project that uses git submodules. Usually when there is a conflict there are two sets of changes, theirs and ours. Resolving the conflicts is about merging these two into one. But I noticed that for git submodules the diff shows a third value:
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
What do the "- ", " -" and "++' mean?
Note that it's possible that the submodule version actually checked out in the repository before the merge was neither theirs nor ours, would that explain the three hashes?
It simply means the submodule gitlink (the special entry in the index of the parent repo) was changed both in source and destination.
(See git diff
man page)
++
means one line that was added does not appear in either branch1 or branch2
From Git Tools - Advanced Merging:
You have three SHA1 because in a conflict, Git stores all of these versions in the index under “stages” which each have numbers associated with them.
- Stage 1 is the common ancestor,
- stage 2 is your version and
- stage 3 is from the
MERGE_HEAD
, the version you’re merging in (“theirs”).
The combined diff format section has all the details:
When shown by
git diff-files -c
(combined diff of merged files), it compares the two unresolved merge parents with the working tree fileI.e.
file1
is stage 2 aka "our version",file2
is stage 3 aka "their version".A
-
character in the columnN
means that the line appears infileN
but it does not appear in the result.
A+
character in the columnN
means that the line appears in the result, andfileN
does not have that line".
In your case:
- A
-
in the first column meansfile1
, meaning stage 2, meaning "ours" version. - A
-
in the second column meanfile2
, meaning stage 3, meaning "theirs". - A '
++
' means an addition which was not infile1
or2
(each time when compared with the common ancestor from stage 1)
来源:https://stackoverflow.com/questions/41151216/three-commit-references-when-merging-submodules