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