请你帮我理解这种行为:
在分支开发上,我有一个包含两个提交的文件:
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
有什么问题?该文件不存在于功能分支中! 合并冲突的原因是什么? 我的存储库是否已损坏? 我怎么能找出原因?
答案 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