Git Merge冲突文件不存在

时间:2015-11-27 14:11:38

标签: 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

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

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

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

7 个答案:

答案 0 :(得分:3)

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

我遇到一个问题,即master已将文件重命名为A.java到B.java,并且功能分支已对A.java进行了更改。
我与B.java发生了合并冲突,即使功能分支没有名为B.java

的文件的历史记录

答案 1 :(得分:3)

在我的情况下,我遇到了同样的问题,因为git中的文件重命名是运行时启发式的。 (这是迈克尔·蒙蒂思的答案所提出的,但没有解决方案。)

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

git merge master -X rename-threshold=100%

至于为什么我遇到这个问题:这是因为我们的团队决定采用单壁球提交策略进行拉取请求。这意味着master上的个人提交是 huge ,从而增加了在这些单一的大规模提交中“重命名”的机会。

答案 2 :(得分:0)

首先,您可以查看。

// 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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

在我的情况下(IntelliJ IDEA),他遇到了事件日志中提到的一个文件的问题。由于此文件在两个分支上都不存在,因此我创建了一个具有冲突名称的空文件,已提交并可以再次合并。

我确实在git diff

中看到了该文件

答案 5 :(得分:0)

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

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

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

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

然后您可以运行

git conflicts

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

答案 6 :(得分:0)

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

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

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

git rm com.mycompany.fileThatDoesNotExist.java