簡體   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