在多个阶段条目的git中出现致命错误

在OS X上使用Git 2.2.0版本和unity游戏引擎,并想提交我的代码。我添加了所有内容,没有得到错误消息。然后提交-m,得到如下错误信息:

fatal: multiple stage entries for merged file 'Assets/Prefabs/Resources'

没有注意到我推了它,这没有给出错误消息,实际上说Everything up-to-date 所以我检查了bitbucket(回购所在的地方),它没有显示我的提交。所以我检查了我的本地日志,也没有显示我的提交

我调查了谷歌寻找答案…和什么都没有。这个错误是什么?我该怎么解决呢?

63404 次浏览

第一个变通方法似乎适用于最新版本的Git (2.3+, Q2+ 2015),在格兰特更多最新答案中提到:

  1. 删除索引

    $ rm .git/index
    
  2. Add all

    $ git add -A
    
  3. Commit

    $ git commit -a
    

Original answer (late 2014)
The usual workaround is to:

  • clone again the remote repo into a new local repo
  • add the changes from the first repo to the second one:

    $ cd /patH/to/second/cloned/repo
    $ git --work-tree=/path/to/first/repo add .
    

You can see this error message in read-cache.c, discussed in this patch ("read-cache.c: Ensure unmerged entries are removed "), and introduced in the Git 2.2 commit.
Since this is so recent, it is possible that downgrading Git to 2.1 would be enough to not be affected by that patch.

The OP Daniel Toebe adds in the comments:

The issue happened on my macbook, which decided to fail on me, and another computer mishap put me way behind on my projects.

您可以从项目中删除Git索引文件。在项目的根目录下,运行以下命令:

rm .git/index

之后,让它工作。

我相信我遇到了这个问题,因为我添加并提交了更改,然后删除了我刚刚提交的文件。如果这听起来与您的情况类似,我建议您按照下面的步骤来避免重新克隆和手动添加更改。

我能够通过删除存储库中的.git/index文件来修复这个问题,类似于@slider所建议的(我认为他输入了错误的路径)。

rm .git/index

然后我必须再次添加并提交我的本地更改

git add -A
git commit -m "..."

然后我就可以远程操作了。

git索引是什么,它是如何相关的?

Git索引是怎么回事?< / >

git“索引”是你放置想要提交到git存储库的文件的地方。

在你“提交”(签入)文件到git存储库之前,你需要首先将文件放在git“索引”中。

我相信通过删除这个文件,git会重新索引这个repo,创建一个新的repo,然后就可以开始了。它解决了这个问题,因为本地存储库在没有我删除的文件的情况下重新建立了索引。

编辑:这似乎是Mac相关的(基于评论),所以如果它有帮助,我在OSX 10.10和git版本2.3.4安装通过brew。

为项目

rm .git/index
git reset

删除索引后,你需要通过git重置重新创建它

子模块:

转到主项目文件夹

rm .git/modules/your_project_structure/index
git reset --hard HEAD

我尝试了一种不同的解决方法,对我来说很有效。下面是我的选项

#cd .git
#rm index
#cd ..
#git add .

我刚刚得到这个错误与Github桌面客户端(OSX)。我所做的就是退出应用程序,重新打开,然后它就开始工作了。

如果这发生在子模块中

索引文件位于父目录.git中:

.git/modules/your_project_structure/index

在子模块中,没有名为.git的目录(至少在我正在工作的项目中),只有一个.git文件告诉你(和git)在哪里寻找该项目的git目录。

Git状态显示了我没有做的更改

在删除索引文件并执行git reset之后,我发现自己面临着许多难以解释的变化,并且硬重置并没有帮助。

警告你将失去所有的更改,所以提交它们并在继续之前推送。

索引似乎已损坏,因此我使用以下命令删除了它。

git rm -rf --cached .
git reset --hard HEAD