Git合并失败,因为我有未合并的文件。

125

git继续用其不友好的错误警告让我感到困惑,这个错误真的值得奖励:

git merge is not possible because you have unmerged files

我的情况:我的GitHub主分支在本地主分支也被编辑时进行了编辑(直接在浏览器中)。

我错误地认为你可以简单地合并这两个版本,然后就完成了,但是,我无法合并 - 因为我的文件没有合并。

git merge remote/master
导致
error: merge is not possible because you have unmerged files.
hint: Fix them up in the work tree, and then use 'git add/rm <file>'
hint: as appropriate to mark resolution and make a commit.
fatal: Exiting because of an unresolved conflict.
所以,在添加并提交本地更改后,尝试再次合并,我得到了以下结果:

所以,在添加并提交本地更改后,尝试再次合并,我得到:

merge: remote/master - not something we can merge

很明显,我在这里缺少一些重要的东西...我对合并的含义有错误的理解吗?我如何解决这个不同的远程主分支/本地主分支问题?


通常,它会告诉您哪个文件具有合并冲突。然后,您可以打开它们(在合并模式下使用像vscode或JetBrains IDE这样的良好编辑器),并查看冲突所在的位置。这并不太复杂。 - Harlin
10个回答

81

前不久,我一再遇到同样的问题。当您尝试从远程存储库拉取文件并且本地实例中有一些冲突的文件时,此问题通常会发生。如果您正在使用像IntelliJ这样的IDE从git中,系统会提示您选择是保留自己的更改还是希望远程版本的更改覆盖您的更改。如果您没有作出任何选择,则会陷入这种冲突。您需要做的只是运行:

git merge --abort # The unresolved conflict will be cleared off

你可以在休息前做的事情继续进行。


18
致命错误:没有合并可中止。 - john k
1
我发现执行命令 "git restore --staged <filename>" 对我来说解决了这个问题。 - DeSpeaker

39

错误信息:

merge: remote/master - not something we can merge

这个错误是说Git无法识别remote/master。这可能是因为您没有一个名为"remote"的"remote"。您有一个名为"origin"的"remote"。

将"remotes"视为到Git服务器的url的别名。master是您本地检出的分支版本。origin/master是您已经获取(下载)的来自Git服务器的最新版本的masterfetch始终是安全的,因为它只会更新您的分支的"origin/x"版本。

因此,要使您的master分支重新同步,请首先从git服务器下载最新内容:

git fetch

然后,执行合并:

git merge origin/master

...但是,也许更好的方法应该是:

git pull origin master

pull 命令可以在一步中为您执行 fetchmerge 操作。


谢谢,我之前没意识到 pull 命令也会合并。我已经执行了 fetch 和 merge 命令,但好像没有任何变化——尽管 git 现在显示所有内容都是最新的。我本来以为 merge 会出现“合并冲突”,需要手动编辑要保留的更改? - Kokodoko
在这种情况下,看起来Git能够为您执行差异分辨率...为了确信您已经采取了所需的步骤,我经常使用一个好的“合理性检查”工具,即“gitk”。它随Git安装一起提供,因此您应该已经拥有它。只需在命令终端上键入“gitk”,即可以GUI类型查看您的Git树。 - Jonathan.Brink
1
合并操作在我的文件中插入了注释,看起来像这样:<<<<<<<HEAD key:7234095827345093458。也许是因为Git找不到我的文件合并工具,所以插入了这些代码,让我在文本编辑器中解决? - Kokodoko
是的,那听起来像是一个合理的原因...如果你想重新执行合并(在修复合并工具后),你应该能够执行:git reset --hard MERGE_HEAD,以回到合并前的状态。 - Jonathan.Brink
谢谢,这已经回答了我的问题,为什么我不能合并(我必须先有两个不同的版本可用)。现在剩下的问题是如何让git在冲突的情况下自动打开“opendiff/fileMerge”。我想这是一个不同的问题。 - Kokodoko
哦......我刚刚发现....你必须手动键入“git mergetool”....这将使用所有突出显示的更改打开fileMerge... - Kokodoko

29

可能是未合并的路径导致了此问题

error: Merging is not possible because you have unmerged files.

如果是这样,请尝试:

git status

如果它提示

您有未合并的路径。

请按建议操作:解决冲突后提交,或者使用以下命令中止合并:

git merge --abort

你可能还会看到列在未合并路径下的文件,你可以通过执行以下操作来解决

git rm <file>

3
这只是一个没有帮助的错误信息...在我的情况下,它主要意味着我有合并冲突需要手动修复。如果错误消息实际上说了这一点,那将会非常有帮助。 - Kokodoko
在执行了 git status 命令之后,如果有未提交的更改,需要使用 git add path 命令将其添加到暂存区。 - Prabs
git rm 帮助了我。 - Kiran

7

一种简单的方法是在终端窗口/命令提示符中键入git status。这应该会显示需要添加或删除的文件。 cmd of git status

然后您可以使用git add命令加上将来要提交的文件路径(以将文件添加到您的提交中) 或者使用git rm命令,也跟着文件路径(从您的提交中删除文件)。为了澄清,后一个命令不会从您的系统中删除该文件。

所有标记为红色的文件都处理完毕后,就可以提交并推送了。


6

我也遇到了类似的问题。

我的问题是:当我合并分支并使用 IDE 解决冲突时,IDE 通常会显示提交面板,但实际上没有显示。

我认为我已经成功地合并了分支,但当我进行推送或拉取操作时,Git 提醒我“在合并之前提交您的更改”或“更新被拒绝,因为当前分支的顶端落后了”。

我的解决方案:git merge --continue

如果您想中止此次合并,您也可以运行git merge --abort


5

我遇到了相同的问题,当我看到这个错误时,我无法决定是笑还是把头撞在桌子上...

Git实际上想告诉你的是:"你已经处于合并状态,需要先解决那里的冲突!"

你尝试进行合并时发生了冲突。然后,Git保持在合并状态,如果你想用其他命令解决合并,Git认为你想执行一个新的合并,因此它会告诉你由于当前未合并的文件而无法执行此操作...

你可以使用git merge --abort退出这个状态,然后尝试执行其他命令。

在我的情况下,我尝试进行拉取,并希望手动解决冲突,但出现了错误...


2
很高兴知道我不是唯一一个被Git的神秘错误信息困扰的人。 - Kokodoko
在执行 git merge --abort 后,每个命令都被拒绝了,git 开始执行命令。 - Muhammad Shoaib Murtaza
只要git正常工作,它就很好用...否则只需执行rm -rf workspace和git checkout即可。: )与其浪费时间去理解git的神秘信息,不如这样做。 - Stunner

3
如果您之前尝试过合并并解决了一些来自其他分支的冲突,Git 可能会在当前分支上进行一些自动更改。因此,即使您确定没有进行任何修改,请尝试运行 git status 命令,就像这样: They did it! 然后,只需运行 git add .git commit -m "message" 命令,再次尝试合并即可。请注意保留 HTML 标签。

2

这可能是导致此问题的另一个原因(在我的情况下涉及Intellij,但不确定是否有影响):尝试将主分支中的更改合并到基于功能分支的分支中。

换句话说,在以下安排中将“main”合并到“current”:

main
  |
  --feature
      |
      --current

我解决了所有的冲突,但GiT报告存在未合并的文件,我被卡住了,直到我将主要分支合并到功能分支,然后再将功能分支合并到当前分支。


0

我用以下git命令成功解决了这个问题:

git init   
git rm -r -f *  
git merge origin main  
git add *  
git commit -m 'merging'  
git pull

-1

尝试

git add *
git commit -comment
git pull

解释 git add * : 意味着您正在添加所有未添加的文件 git commit -comment : 您正在提交刚刚添加的文件 git pull : 现在您正在从在线版本获取更改


@GertArnold,我已经添加了解释。感谢您的建议。 - MUHINDO
我认为在所描述的情况下,提交将立即导致合并冲突。 - Gert Arnold

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接