使用`git checkout - 他们的 `解决合并冲突的合法方式?

问题描述 投票:1回答:1

我正在从master更新并得到一个合并错误的文件,我不应该修改(我必须这样做意外)。

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

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

git git-merge merge-conflict-resolution
1个回答
2
投票

实际上,您可以使用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所需的--theirspath所需的MERGE_HEAD将是不同的!

© www.soinside.com 2019 - 2024. All rights reserved.