我们可以通过以下方式再现这一问题:
b4482合并为代理在3f557 git签出-b测试3f55709e6678c687195 test 59662459a348d039 git合并b448214b8f2c0a6a9ba2381a1983ce20e6514218有许多不相关的冲突,所以不要去看它们。我们只在第502行查看components/resolved_ts/src/endpoint.rs,上面写着
let resolved_ts = observe_region.resolver.resolve(ts).min();然而,“他们的”版本是
let resolved_ts = observe_region.resolver.resolve(ts);现在,我决定用“他们的”替换整个文件,所以我运行
git checkout --theirs components/resolved_ts
Updated 1 path from the index然后我发现
let resolved_ts = observe_region.resolver.resolve(ts).min();是的,该文件没有更改为“他们的”。这很奇怪。
但是,如果我跑
git checkout b448214b8f2c0a6a9ba2381a1983ce20e6514218 -- components/resolved_ts该文件被更改为“他们的”。现在更奇怪了。既然这样做有效,为什么git checkout --theirs会失败?
有人能告诉我为什么会这样吗?
我的工具链是
git --version
git version 2.30.1 (Apple Git-130)发布于 2022-10-18 16:26:11
如果您更仔细地检查git merge输出,您将看到以下内容:
Auto-merging components/resolved_ts/src/endpoint.rs
Auto-merging components/resolved_ts/src/cmd.rs将其与以下方面进行比较:
Auto-merging Makefile
CONFLICT (content): Merge conflict in Makefile
Auto-merging Cargo.toml
CONFLICT (content): Merge conflict in Cargo.toml请注意,对于最后两个文件中的每个文件,我们首先看到:
Auto-merging然后:
CONFLICT (content):后面跟着文件的名字。然而,对于endpoint.rs和cmd.rs,我们看到Auto-merging后面跟着.什么都没有,表示自动合并工作正常。
如果检查索引中的内容,就不会留下“他们的”版本:
$ git ls-files --stage components/resolved_ts/src/endpoint.rs
100644 a4e5f6e38641e12820167e715e8666b844943f40 0 components/resolved_ts/src/endpoint.rs类似地,git status --short显示:
$ git status --short | grep components/resolved_ts/
M components/resolved_ts/src/cmd.rs
UU components/resolved_ts/src/resolver.rs
M components/resolved_ts/tests/mod.rs请注意,endpoint.rs不在此列表中:存在冲突,但很容易自动解决,Git不仅解决了冲突,而且对结果调用了git add。这就是为什么--theirs什么也不做的原因:索引中没有“他们的”版本。一个匹配的components/resolved/路径,它在索引中有一个theirs版本--在这里:
从索引中更新1条路径
来自于-is UU components/resolved_ts/src/resolver.rs。
https://stackoverflow.com/questions/74108329
复制相似问题