使用`git checkout --theirs <filename>` 是解决合并冲突的一种gitimate 方法吗?
Is using `git checkout --theirs <filename>` a legitimate way of resolving a merge conflict?
我正在从 master
进行更新,但遇到了一个我不应该修改的文件的合并错误(我一定是不小心这样做的)。
与其试图找出代码中的合并问题,不如告诉 git 使用 'their' 副本?我可以只使用 git checkout --theirs
而不产生任何后果吗?
如果不是,正确的处理方法是什么?
事实上,您可以 git checkout --theirs -- <em>path</em>
来替换工作树版本文件(名为 path)及其版本。仅当 path
类似于 git checkout
选项时才需要 --
部分,例如,如果文件名为 --ours
或 --force
或类似的傻事。 (不过,养成使用它的习惯是件好事,以防万一。有一天你会偶然发现一个名为 -rf
的文件,而 -- -rf
的习惯会阻止你 运行 rm -rf
... :-) )
由于 Git 让实施显示出来,因此 不会 将文件标记为已解决。您必须单独 git add
将其标记为已解决的路径。这是因为当文件处于冲突状态时,所有三个版本(基本、--ours
和 --theirs
)都存储在该索引条目的三个 "conflicting versions" 槽中。要将文件标记为已解决,您必须使用 Git 破坏这三个槽并将文件写入更正常的槽零条目。这就是 Git 知道哪些文件已解析,哪些未解析的方式:通过这些特殊的编号更高的索引槽。
特别地,如果你 git checkout MERGE_HEAD <em>path</em>
,将 将文件标记为已解决。这是因为这种形式的 git checkout
首先将文件从指定的提交 — MERGE_HEAD
— 复制到索引槽零,然后从那里复制到工作树。该 "copy to slot 0" 步骤解决了合并冲突。但请注意,如果您 重命名 文件,则 path
您需要 --theirs
和 path
你需要的跟MERGE_HEAD
会不一样!
我正在从 master
进行更新,但遇到了一个我不应该修改的文件的合并错误(我一定是不小心这样做的)。
与其试图找出代码中的合并问题,不如告诉 git 使用 'their' 副本?我可以只使用 git checkout --theirs
而不产生任何后果吗?
如果不是,正确的处理方法是什么?
事实上,您可以 git checkout --theirs -- <em>path</em>
来替换工作树版本文件(名为 path)及其版本。仅当 path
类似于 git checkout
选项时才需要 --
部分,例如,如果文件名为 --ours
或 --force
或类似的傻事。 (不过,养成使用它的习惯是件好事,以防万一。有一天你会偶然发现一个名为 -rf
的文件,而 -- -rf
的习惯会阻止你 运行 rm -rf
... :-) )
由于 Git 让实施显示出来,因此 不会 将文件标记为已解决。您必须单独 git add
将其标记为已解决的路径。这是因为当文件处于冲突状态时,所有三个版本(基本、--ours
和 --theirs
)都存储在该索引条目的三个 "conflicting versions" 槽中。要将文件标记为已解决,您必须使用 Git 破坏这三个槽并将文件写入更正常的槽零条目。这就是 Git 知道哪些文件已解析,哪些未解析的方式:通过这些特殊的编号更高的索引槽。
特别地,如果你 git checkout MERGE_HEAD <em>path</em>
,将 将文件标记为已解决。这是因为这种形式的 git checkout
首先将文件从指定的提交 — MERGE_HEAD
— 复制到索引槽零,然后从那里复制到工作树。该 "copy to slot 0" 步骤解决了合并冲突。但请注意,如果您 重命名 文件,则 path
您需要 --theirs
和 path
你需要的跟MERGE_HEAD
会不一样!