我对git的理解是,当合并它时,将更改合并到一个文件中,然后将其添加到索引中。如果发生合并冲突,则不会在索引中添加文件,并将其留在具有冲突标记的工作树中。如果我运行git status,它会将unmerged paths
显示为冲突中的文件。 git如何获取这些文件的列表?如果我对仍然存在标记的冲突文件运行git add,它将不再显示为冲突,因此标记可能不是标识符。
答案 0 :(得分:2)
如果发生合并冲突,则不会在索引中添加文件,并将其留在带有冲突标记的工作树中。
它在索引中:见git ls-files
:
对于未合并的路径,索引不是记录单个模式/ SHA-1对,而是记录最多三个这样的对;一个来自第一阶段的树O,第二阶段的A,第三阶段的B.
git read-tree
详细介绍了2路合并:
每个“索引”条目都有两位“阶段”状态 第0阶段是正常阶段,是您在任何正常使用中看到的唯一一个。
但是,当你用三棵树做git read-tree时,“stage”从1开始。
这意味着您可以
git read-tree -m <tree1> <tree2> <tree3>
您最终会得到一个索引,其中包含“
<tree1>
”中的所有stage1
条目,“<tree2>
”中的所有stage2
条目以及所有条目“<tree3>
”中的stage3
个条目 当执行另一个分支到当前分支的合并时,我们将公共祖先树用作<tree1>
,将当前分支头用作<tree2>
,将另一个分支头用作<tree3>
强>