繁体   English   中英

Git合并冲突虽然文件不存在

[英]Git Merge Conflicts Although the File Does Not Exist

你能帮我理解这种行为吗:

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

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

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

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'.

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

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

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

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

但是当我尝试将 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.

我遇到了合并冲突(都被修改了)。

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

问题是什么? 该文件在功能分支中不存在! 合并冲突的原因是什么? 我的存储库损坏了吗? 我怎样才能找出原因?

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

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

git merge master -X rename-threshold=100%

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

可能是您的功能分支中的修改文件已在开发分支中重命名?

我遇到了一个问题,master 将一个文件(例如 A.java)重命名为 B.java,并且功能分支对 A.java 进行了更改。
即使功能分支没有名为 B.java 的文件的历史记录,我也与 B.java 发生了合并冲突

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

首先你可以检查一下。

// List git-ignored files  
$ git ls-files . --ignored --exclude-standard --others

// List untracked files  
$ git ls-files . --exclude-standard --others

你可以试试。

1) "" git add . "" needs u to be in the correct directory, so you can try "" git add -A "" to add everything.  
AND  
2) git clean -f

就我而言(IntelliJ IDEA),他遇到了事件日志中提到的一个文件的问题。 由于这个文件在两个分支上都不存在,我创建了一个名称冲突的空文件,提交并可以再次合并。

我也用git diff看到了这个文件

我发现每当我们更改 css 和 js 编译器/压缩器代码/引擎/任何内容时都会发生这种情况。 通常只是创建它说有冲突但不存在的文件可以缓解问题。 它允许您提交其他文件...但仍然没有提交有问题的文件。 然后你可以在单独的提交中提交这些文件,然后删除它们并再次提交,一切都已修复。 愚蠢的疯狂修复,但它每次都有效。

如果您在识别冲突文件时遇到困难,我强烈建议您执行以下操作。

首先使用此命令创建一个干净的别名

git config --global alias.conflicts "diff --name-only --diff-filter=U"

然后你可以运行

git conflicts

轻松获取有问题的文件列表。

重命名文件并尝试变基后,我遇到了类似的问题。 我收到消息:

“com.mycompany.fileThatDoesNotExist.java 需要合并。您必须编辑所有合并冲突,然后使用 git add 将它们标记为已解决”。

我通过使用以下命令删除文件来解决它:

git rm com.mycompany.fileThatDoesNotExist.java

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM