在多个阶段条目的git中获得致命错误

Dan*_*ebe 239 git

在OS X上使用Git版本2.2.0和统一游戏引擎,并且想要提交我的代码.我添加了所有内容,但未收到错误消息.然后提交-m,并收到此错误消息:

fatal: multiple stage entries for merged file 'Assets/Prefabs/Resources'
Run Code Online (Sandbox Code Playgroud)

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

我已经看了谷歌的答案......什么都没有.这个错误是什么?我该如何解决?

Von*_*onC 380

第一个解决方案,似乎适用于最新版本的Git(2.3 +,Q2 + 2015),在授权更新答案中提到:

  1. 删除索引

    $ rm .git/index
    
    Run Code Online (Sandbox Code Playgroud)
  2. 都加进去

    $ git add -A
    
    Run Code Online (Sandbox Code Playgroud)
  3. 承诺

    $ git commit -a
    
    Run Code Online (Sandbox Code Playgroud)

原始答案(2014年末)
通常的解决方法是:

  • 再次将远程仓库克隆到新的本地仓库中
  • 将更改从第一个repo添加到第二个repo:

    $ cd /patH/to/second/cloned/repo
    $ git --work-tree=/path/to/first/repo add .
    
    Run Code Online (Sandbox Code Playgroud)

您可以read-cache.c在此修补程序中讨论此错误消息(" read-cache.c:确保删除未合并的条目 "),并在Git 2.2提交中引入.
由于这是最近的,有可能 Git 降级到2.1足以不受该补丁的影响.

OP丹尼尔Toebe增加的评论:

这个问题发生在我的macbook上,它决定对我失败,另一个计算机事故让我在我的项目上落后.

  • 对于任何感兴趣的人,这发生在我身上,因为我不小心编辑了.git文件夹中的文件而不是文件本身. (2认同)
  • git reset HEAD。这解决了这个问题 (2认同)

gra*_*ant 165

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

我能够通过删除我的存储库中的.git/index文件来解决这个问题,类似于@slider建议的(我相信他错误地输入了路径).

rm .git/index
Run Code Online (Sandbox Code Playgroud)

然后我不得不再次添加并提交我的本地更改

git add -A
git commit -m "..."
Run Code Online (Sandbox Code Playgroud)

然后我能够远程推送.

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

什么是Git指数的交易?

git"index"是您要将文件放置到git存储库的位置.

在"提交"(签入)文件到git存储库之前,需要先将文件放在git"index"中.

我相信通过删除这个文件,git将重新索引repo,创建一个新的,你很高兴.它解决了这个问题,因为本地存储库被重新编入索引而没有我删除的文件引起了所有的麻烦.

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

  • 在Mac OS X Yosemite上确认.虽然没有特定的可重现方案,但在Android Studio中工作时发生了变化. (4认同)
  • 这应该是正确的答案,因为它有效并且有更好的解释.这也恰好发生在我身上. (4认同)

far*_*ncz 118

对于项目

rm .git/index
git reset
Run Code Online (Sandbox Code Playgroud)

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

对于子模块:

转到主项目文件夹

rm .git/modules/your_project_structure/index
git reset --hard HEAD
Run Code Online (Sandbox Code Playgroud)

  • 删除索引后git重置完全锁定它.谢谢!如果不重置,则每个文件都是索引的新文件,因此必须添加.重置将重建索引.即使我不明白git如何重建索引,没有索引? (4认同)
  • 谢谢!如果没有git reset,它希望我重新添加存储库中已有的所有文件. (2认同)

小智 29

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

rm .git/index
Run Code Online (Sandbox Code Playgroud)

那个git之后就可以了.

  • 这不回答这个问题.请详细说明这个答案. (3认同)
  • @ChristophLSA谢谢 - 我回答了这个动作为提供清晰度所做的工作.是否可以更新此答案以反映正确的路径并告知用户该操作的作用? (2认同)