複数のステージエントリのgitで致命的なエラーを取得する


241

OS XのUnityゲームエンジンでGitバージョン2.2.0を使用していて、コードをコミットしたかった。すべてを追加してもエラーメッセージは表示されませんでした。次に-mをコミットすると、次のエラーメッセージが表示されます。

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

私がプッシュしたことに気付かなかった、それはエラーメッセージを出さなかった、と実際に言ったEverything up-to-date ので、私はbitbucket(リポジトリが保持されている場所)をチェックしましたが、私のコミットは表示されませんでした。ローカルログを確認したところ、コミットは表示されません。

私は答えを求めてグーグルを調べました...そして何も。このエラーは何ですか?どうすれば修正できますか?


どのバージョンのgitまたはツールを使用していますか?複数のステージエントリのチェックを改善することについて、開発者リストに最近のスレッドがあります。news.gmane.org/gmane.comp.version-control.git
フィリップオークリー

2.2.0の追加のチェックが含まれている可能性が高いようです。「マージされていないエントリが確実に削除されるようにする」8月12日、Jaime Soriano Pastor氏は、最初は1つのスレッドかもしれません。
Philip Oakley

4
なぜこれが起こるのですか?
チャーリーパーカー、

上記のファイルをダミー編集して「コミットして同期」するだけです。
sajanyamaha

回答:


381

Gitの最近のバージョン(2.3 +、Q2 + 2015)で動作するように思われる最初の回避策は、grantより最新の回答で言及されています

  1. インデックスを削除する

    $ rm .git/index
    
  2. 全て追加する

    $ git add -A
    
  3. コミット

    $ git commit -a
    

元の回答(2014年後半)
通常の回避策は次のとおりです。

  • リモートリポジトリを新しいローカルリポジトリに再度クローンする
  • 最初のリポジトリから2番目のリポジトリに変更を追加します。

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

このエラーメッセージはread-cache.c、このパッチで説明されている(「read-cache.cマージされていないエントリが削除されていることを確認する」)で確認できGit 2.2コミットで導入されています
これは非常に最近のことなので、Gitを2.1にダウングレードするだけで、そのパッチの影響を受けない可能性があります。

OPダニエルToebeは追加コメントで

私のMacbookで問題が発生し、私は失敗することになり、別のコンピューターが事故でプロジェクトを後回しにしてしまいました。


@sharpnerそれはバグであるか、あなたのケースではそのパッチの副作用である可能性があります。
VonC、2014

1
応答が遅れて申し訳ありません...私のMacbookで問題が発生し、私は失敗することになり、別のコンピューターが事故でプロジェクトを先送りしてしまいました。
Daniel Toebe 14

1
@DanielToebe良いフィードバック。私はより多くの可視性のために答えにそれを含めました。
VonC、2014

私はちょうどそれを試みた後、それに遭遇しましたgit commit -c sha
クリスリーシュマン'27年

2
興味のある人にとっては、ファイル自体ではなく.gitフォルダー内のファイルを誤って編集していたため、これが起こりました。
ostler.c 2016年

166

変更を追加してコミットし、コミットしたばかりのファイルを削除したため、この問題が発生したと思います。これがあなたのケースに似ていると思われる場合は、以下の手順に従って再クローニングを保存し、変更を手動で追加することをお勧めします。

@sliderが示唆したように、リポジトリ内の.git / indexファイルを削除することで、この問題を修正することができました(パスを誤って入力したと思います)。

rm .git/index

次に、ローカルの変更を再度追加してコミットする必要がありました

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

その後、リモートでプッシュすることができました。

gitインデックスとは何ですか?どのように関連していますか?

Gitインデックスの扱いは何ですか?

gitの「インデックス」は、gitリポジトリにコミットするファイルを配置する場所です。

ファイルをgitリポジトリに「コミット」(チェックイン)する前に、まずファイルをgitの「インデックス」に配置する必要があります。

このファイルを削除することで、gitはリポジトリのインデックスを再作成し、新しいリポジトリを作成します。これで問題ありません。ローカルリポジトリのインデックスが再作成されるため、この問題は解決されます。

編集:これはMac関連(コメントに基づく)のようです。それが役に立てば、OSX 10.10とgitバージョン2.3.4をbrewでインストールできます。


1
いいですね、これでうまくいきました。説明ありがとうございます。ここで1つの注意点は、これを行う前に、現在のデフォルトの変更リストを追加していないファイルを隠しておくか、移動または削除することです。彼らはgit add -A
カービィ

4
Mac OS X Yosemiteでこれを確認してください。具体的な再現性のあるシナリオがなかったものの、アンドロイドStudioでの作業中に起こった...
ドリュー

4
これが機能し、より良い説明があるので、これは正しい答えです。これはちょうど私にも起こりました。
Jared Burrows

1
私のためにも働いた。IntelliJにバージョン管理ルートを追加すると失敗しましたが、gitインデックスのrmを実行すると正常に機能しました。説明@グラントをありがとう。
Andrew Eells、2015年

1
また、vimでいくつかの変更を行っているときにIntelliJがバックグラウンドで実行されているときにもこの問題が発生しました。に競合状態があったと思いますgit。(実際には、たくさんあると思います。)IntelliJを閉じて、インデックスを削除し、作業を再コミットするとうまくいきました。
ロバート・フィッシャー

119

プロジェクト用

rm .git/index
git reset

インデックスを削除した後、git resetでインデックスを再作成する必要があります

サブモジュールの場合:

メインプロジェクトフォルダに移動

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

4
インデックスの削除後にgitがリセットされ、完全に釘付けになりました。ありがとう!リセットしないと、すべてのファイルがインデックスに新しく追加されるため、追加する必要があります。リセットすると、思われるインデックスが再構築されます。インデックスなしでgitがインデックスを再構築する方法を理解していませんが?
JosFabre

1
@JosFaberインデックスはコミット履歴ではないためです。実際には、「冗長な」ヘルパー構造です。schacon.github.io/gitbook/7_the_git_index.htmlを参照してくださいこれにより、作業ツリーとHEADを比較して完全に再構築できます。そして、それはまさにgit resetが行うことです。マニュアルページの説明:...コピーエントリを<tree-ish>からインデックスにリセットします...
farincz

2
ありがとうございました!gitリセットなしでは、リポジトリに既にあるすべてのファイルを再度追加する必要がありました。
Robert Bernstein

1
Macでsourcetreeを使用しています。私は手動で.git / indexを削除し、最後に適切なコミットを選択し、右クリックして(この場合は)リセットマスター(この場合)を選択しました-次に、作業を良好な状態に保つ混合オプションを選択しました。その後、現在の作業をコミットすることができ、現在はすべてが正常です。
user216661 2016年

1
最もクリーンで最速の方法!
h4rd4r7c0r3

29

プロジェクトからGitインデックスファイルを削除できます。プロジェクトのルートで、次のコマンドを実行します。

rm .git/index

そのgitの後で動作します。


3
これは質問の答えにはなりません。この答えを具体的に具体化してください。
ArtOfCode 2015年

rm: /.git/index: No such file or directoryMac OSX Yosemiteではうまくいきませんでした。git 2.3.4を自作でインストール
付与

@grant最初にスラッシュを削除する必要があります。(rm .git/indexあなたのgitディレクトリに)。
ChristophLSA

2
@ChristophLSAありがとう-わかりやすくするためにこのアクションが行うことの説明で答えました。この回答を更新して適切なパスを反映し、ユーザーにアクションの内容を通知できますか?
付与

1
これが機能する理由を知っています。この問題は、破損したインデックスが原因で発生します。コマンドラインでコミットメッセージを書き込んでいるときにIntelliJのコードを変更してインデックスを破損すると、この問題が発生しました。インデックスを削除しても変更は破棄されず、単にステージングが解除されます。
Pyrolistical

3

別の解決策を試してみましたが、うまくいきました。以下は私のオプションです

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

@farinczが言ったように、git reset別の方法で呼び出してインデックスを再作成する必要がありますfatal: Could not reset index file to revision 'HEAD'
kuskmen

1

これがサブモジュールで発生した場合

インデックスファイルは、親.gitディレクトリ内にあります。

.git/modules/your_project_structure/index

サブモジュールには、.git(少なくとも私が取り組んでいるプロジェクトでは)という名前のディレクトリはありません.git。そのプロジェクトのgitディレクトリを探す場所を(そしてgitに)伝えるファイルだけがあります。

Gitのステータスに、自分が行っていない変更が表示される

インデックスファイルを削除し、を実行したgit reset後、不可解な多くの変更に直面し、ハードリセットが役に立たなかった。

警告はすべての変更を失うので、続行する前にそれらをコミットしてプッシュしてください。

インデックスが壊れているように見えたので、次のコマンドを使用して削除しました。

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

0

Githubデスクトップクライアント(OSX)でこのエラーが発生しました。私がしたことはすべて、アプリを終了して再度開いただけであり、それが機能し始めました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.