使用`git checkout --thehis <filename>`解决合并冲突的合法方式?

时间:2017-02-22 01:45:04

标签: git git-merge merge-conflict-resolution

我正在从master进行更新,并且遇到了一个我不应该修改的文件的合并错误(我必须偶然这样做)。

我可以告诉git使用“他们的”副本,而不是试图找出代码中的合并问题吗?我可以使用git checkout --theirs而不会产生任何后果吗?

如果没有,那么解决这个问题的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

事实上,您可以git checkout --theirs -- path将文件的工作树版本(名为 path )替换为其版本。仅当 -- 类似于path选项时才需要git checkout部分,例如,如果文件名为--ours或{{1}或者像这样的傻事。 (但是,养成使用它的习惯很好,以防万一。有一天你会偶然发现一个名为--force的文件而-rf习惯会阻止你正在运行-- -rf ...... :-))

由于Git允许实现显示,但不会将文件标记为已解决。您必须单独rm -rf路径将其标记为已解决。这是因为当文件处于冲突状态时,所有三个版本 - 基数git add--ours - 都存储在三个&#34;冲突版本中#34;该索引条目的插槽。要将文件标记为已解决,您必须让Git破坏这三个插槽并将文件写入更正常的slot-zero条目。这就是Git如何知道哪些文件被解析,哪些不是:通过这些特殊的更高编号的索引槽。

特别是,如果您--theirs将文件标记为已解决。这是因为这种形式的git checkout MERGE_HEAD path首先将文件从指定的提交 - git checkout - 复制到索引槽零,然后从那里复制到工作树。那&#34;复制到插槽0&#34; step解决了合并冲突。但请注意,如果您重命名该文件,则需要使用MERGE_HEAD path --theirs > path所需要的将是不同的!