Git Merge冲突文件不存在

Ada*_*zek 7 git merge

你能帮我理解一下这个行为:

在分支开发上我有一个包含两个提交的文件:

BOCZA2@PC45819 MINGW64 /c/nttcloud/gitlab/coba/ZAA (develop)
$ git log --oneline -- coba.zaa.model/coba.zaa.model.config/src/main/java/com/zaa/model/config/Channel.java                      
8509cdf Added route generator based on freemarker template
1e890b7 Added XML configuration for test objects in StaticDataInitializer
Run Code Online (Sandbox Code Playgroud)

然后我可以切换到我的功能分支:

BOCZA2@PC45819 MINGW64 /c/nttcloud/gitlab/coba/ZAA (develop)
$ git checkout feature/ZAA_tools_xmlgenerator
Switched to branch 'feature/ZAA_tools_xmlgenerator'
Your branch is up-to-date with 'origin/feature/ZAA_tools_xmlgenerator'.
Run Code Online (Sandbox Code Playgroud)

并检查我没有提交该文件:

BOCZA2@PC45819 MINGW64 /c/nttcloud/gitlab/coba/ZAA (feature/ZAA_tools_xmlgenerator)
$ git log --oneline -- coba.zaa.model/coba.zaa.model.config/src/main/java/com/zaa/model/config/Channel.java
Run Code Online (Sandbox Code Playgroud)

该文件在工作目录中也不存在:

BOCZA2@PC45819 MINGW64 /c/nttcloud/gitlab/coba/ZAA (feature/ZAA_tools_xmlgenerator)
$ cat  coba.zaa.model/coba.zaa.model.config/src/main/java/com/zaa/model/config/Channel.java
cat: coba.zaa.model/coba.zaa.model.config/src/main/java/com/zaa/model/config/Channel.java: No such file or directory
Run Code Online (Sandbox Code Playgroud)

但是当我尝试将develop合并到我的功能分支时:

BOCZA2@PC45819 MINGW64 /c/nttcloud/gitlab/coba/ZAA (feature/ZAA_tools_xmlgenerator)
$ git merge develop
[...]
Auto-merging         coba.zaa.model/coba.zaa.model.config/src/main/java/com/zaa/model/config/Channel.java
CONFLICT (content): Merge conflict in coba.zaa.model/coba.zaa.model.config/src/main/java/com/zaa/model/config/Channel.java
[...]
Automatic merge failed; fix conflicts and then commit the result.
Run Code Online (Sandbox Code Playgroud)

我得到合并冲突(两者都被修改).

BOCZA2@PC45819 MINGW64 /c/nttcloud/gitlab/coba/ZAA (feature/ZAA_tools_xmlgenerator|MERGING)
$ git status -s coba.zaa.model/coba.zaa.model.config/src/main/java/com/zaa/model/config/Channel.java
UU coba.zaa.model/coba.zaa.model.config/src/main/java/com/zaa/model/config/Channel.java
Run Code Online (Sandbox Code Playgroud)

问题是什么?该功能分支中不存在该文件!合并冲突的原因是什么?我的存储库是否已损坏?我该如何找出原因?

Joh*_*ann 6

就我而言,我遇到了同样的问题,因为 git 中的文件重命名是一种运行时启发式。(这是 Michael Monteith 提出的答案,但没有解决方案。)

git 在合并时决定我的分支中存在的文件实际上是我的分支上确实存在的文件的重命名。默认情况下,任何在单个提交中具有 50% 相似性的文件都被视为合并期间的重命名。要求 git 与更高的阈值合并可以解决问题:

git merge master -X rename-threshold=100%

至于我为什么会遇到这个问题:这是因为我们的团队决定对拉取请求采用单次提交策略。这意味着 master 上的单个提交是巨大的,从而增加了在这些单个、大量提交中“重命名”的机会。


Paw*_*wan 6

我通过运行解决了这个问题git reset

  • 请在评论中提及您投票否决的原因,以便我改进我的答案。我尝试了该解决方案,它在我的环境中有效并想分享。在不提及原因的情况下投票否决是“令人沮丧的”。 (3认同)