我正在从master
更新并得到一个合并错误的文件,我不应该修改(我必须这样做意外)。
而不是试图找出代码中的合并问题,我可以告诉git使用“他们的”副本吗?我可以使用git checkout --theirs
而不会产生任何后果吗?
如果没有,那么正确的解决方法是什么?
实际上,您可以使用git checkout --theirs -- path
将文件的工作树版本(命名路径)替换为其版本。只有当--
类似于path
选项时才需要git checkout
部分,例如,如果文件名为--ours
或--force
或类似的东西。 (尽管如此,养成使用它的习惯是好的。以防万一。有一天你会偶然发现一个名为-rf
的文件,-- -rf
习惯会阻止你运行rm -rf
...... :-))
由于Git允许实现显示,但这不会将文件标记为已解决。你必须单独git add
路径标记为已解决。这是因为当文件处于冲突状态时,所有三个版本-base,--ours
和--theirs
都存储在该索引条目的三个“冲突版本”插槽中。要将文件标记为已解决,您必须让Git破坏这三个插槽并将文件写入更正常的slot-zero条目。这就是Git如何知道哪些文件被解析,哪些不是:通过这些特殊的更高编号的索引槽。
特别是,如果你git checkout MERGE_HEAD path
,那将标记文件已解决。这是因为这种形式的git checkout
首先将文件从指定的commit-MERGE_HEAD
复制到索引槽零,然后从那里复制到工作树。 “复制到插槽0”步骤解决了合并冲突。但请注意,如果你重命名文件,你需要path
所需的--theirs
和path
所需的MERGE_HEAD
将是不同的!