Git:如何在“git merge-file”之后将文件标记为冲突?

时间:2018-03-10 00:53:05

标签: git git-merge-conflict

我一直在使用“git merge-file”来帮助我从不同的存储库中移植代码。这很有效。

但是,当发生合并冲突时,虽然“git merge-file”会正确报告,但文件未标记为需要在“git status”中解析。在状态中,文件只是被视为已修改(可以理解,因为合并发生在git的常规流程之外)。

这是一个问题,因为有时候在导入大量文件时,我会错过突出显示冲突的消息。

有没有办法手动告诉git该文件需要解析?

我尝试了“git update-index --unmerged somefile”,但这似乎不起作用:该文件未列为冲突。

1 个答案:

答案 0 :(得分:2)

您必须使用git update-index --index-infogit update-index --stdin

特别是,您必须创建非零阶段索引条目:每个文件最多三个。正如the documentation所述,您还应该删除相应的stage-zero条目(尽管您可能希望确保它首先匹配HEAD提交版本或工作树版本,以避免破坏精心分阶段的变体,例如由git add -p)制作的变体。

Git通过将非零阶段条目写入索引来表示“合并失败”的情况。文件的工作树版本可以包含字面上的任何内容,因为它完全不相关(更新索引,即;请参阅下面的注释)。 stage-1条目是文件的 base 版本;阶段2条目是--ours版本; stage-3条目是--theirs版本。注意,这些中的一个或多个可能丢失,即,一些阶段时隙可能是空的。例如,如果缺少基本版本,则原始冲突是“添加/添加”冲突。

例如,运行git mergetool从较高编号的阶段条目中提取三个版本,然后在三个输入文件上调用您选择的合并工具。 git status命令报告文件的未合并状态。

请注意,三个版本的 content 必须存在于存储库中。要将内容写入存储库数据库,请使用git hash-object -w。有关详细信息,请参阅the git hash-object documentation。 update-index命令获取存储库内blob对象的哈希ID(当然还有模式,阶段编号和名称)。