我一直在使用“git merge-file”来帮助我从不同的存储库中移植代码。这很有效。
但是,当发生合并冲突时,虽然“git merge-file”会正确报告,但文件未标记为需要在“git status”中解析。在状态中,文件只是被视为已修改(可以理解,因为合并发生在git的常规流程之外)。
这是一个问题,因为有时候在导入大量文件时,我会错过突出显示冲突的消息。
有没有办法手动告诉git该文件需要解析?
我尝试了“git update-index --unmerged somefile”,但这似乎不起作用:该文件未列为冲突。
答案 0 :(得分:2)
您必须使用git update-index --index-info
或git 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(当然还有模式,阶段编号和名称)。