web-dev-qa-db-fra.com

Obtenir une erreur fatale dans git pour plusieurs entrées d'étape

Utiliser Git version 2.2.0 avec le moteur de jeu Unity sur OS X et vouloir valider mon code. J'ai tout ajouté et je n'ai pas reçu de message d'erreur. puis commettez -m et obtenez le message d'erreur suivant:

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

Ne le remarquant pas, j'ai poussé, cela n'a pas donné de message d'erreur, en fait, j'ai dit Everything up-to-date Alors j'ai vérifié bitbucket (où le repo est tenu) et il n'affichait pas mon commit. donc j'ai vérifié mon journal local et cela n'affiche pas non plus mon commit.

J'ai cherché sur Google une réponse ... et rien. Quelle est cette erreur? et comment puis-je le réparer?

238
Daniel Toebe

La première solution de contournement, qui semble fonctionner avec les versions récentes de Git (2.3+, Q2 + 2015), est mentionnée dans grant 's , réponse plus à jour :

  1. Supprimer l'index

    $ rm .git/index
    
  2. Tout ajouter

    $ git add -A
    
  3. Commettre

    $ git commit -a
    

Réponse originale (fin 2014)
La solution habituelle consiste à:

  • cloner à nouveau le repo distant dans un nouveau repo local
  • ajoutez les changements du premier repo au second:

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

Vous pouvez voir ce message d'erreur dans read-cache.c , décrit dans ce correctif (" read-cache.c: assurez-vous que les entrées non fusionnées sont supprimées ") et introduites dans le Git 2.2 commit .
Comme il est si récent, il est possible que downgrading Git to 2.1 soit suffisant pour ne pas être affecté par ce correctif.

Le OP Daniel Toebe ajoute dans les commentaires :

Le problème est survenu sur mon macbook, qui a décidé d’échouer, et un autre incident informatique m’a retardée dans mes projets.

378
VonC

Je pense avoir rencontré ce problème car j'ai ajouté et validé des modifications, puis supprimé un fichier que je venais de valider. Si cela semble similaire à votre cas, je vous recommande de suivre la procédure ci-dessous pour enregistrer le ré-clonage et l'ajouter manuellement dans vos modifications.

J'ai pu résoudre ce problème en supprimant le fichier .git/index dans mon référentiel, comme l'a suggéré @slider (je crois qu'il a mal entré le chemin).

rm .git/index

Ensuite, j'ai dû ajouter et valider à nouveau mes modifications locales

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

Je pouvais alors pousser à distance.

Qu'est-ce que l'indice git et comment est-il pertinent?

Quel est le problème avec l'indice Git?

"Index" git est l'endroit où vous placez les fichiers que vous voulez valider dans le référentiel git.

Avant de «valider» (archiver) des fichiers dans le référentiel git, vous devez d'abord les placer dans l’index git.

Je crois qu'en supprimant ce fichier, git réindexera le référentiel, en créera un nouveau et le tour est joué. Il résout ce problème car le référentiel local est réindexé sans le fichier que j'ai supprimé et qui a causé tout le tapage.

Edit: Il semble que cela soit lié au Mac (basé sur les commentaires) donc si cela aide, je suis sur OSX 10.10 et sur la version 2.3.4 de Git installée via brew.

164
grant

Pour projet

rm .git/index
git reset

après avoir supprimé l'index, vous devez le recréer avec git reset

Pour sous-module:

Aller au dossier principal du projet

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

Vous pouvez supprimer le fichier d'index Git de votre projet. À la racine de votre projet, exécutez la commande suivante:

rm .git/index

Après ça ça marche.

29
slider

J'essaie une solution différente et cela fonctionne pour moi. Ci-dessous mes options

#cd .git
#rm index
#cd ..
#git add .
3
wqycsu

Si cela se produit dans un sous-module

Le fichier d'index est situé dans le répertoire parent .git:

.git/modules/your_project_structure/index

Dans un sous-module, il n'y a pas de répertoires nommés .git (du moins dans le projet sur lequel je travaille), il n'y a qu'un fichier .git qui vous indique (et git) où rechercher le répertoire git de ce projet.

Le statut de Git indique les modifications que je n'ai pas apportées

Après avoir supprimé les fichiers d'index et effectué un git reset, je me suis retrouvé confronté à de nombreux changements inexplicables et une réinitialisation matérielle n'aidait pas.

Attention vous perdrez toutes vos modifications, alors validez-les et appuyez sur Push avant de continuer.

L'index semblait corrompu, je l'ai donc supprimé avec les commandes suivantes.

git rm -rf --cached .
git reset --hard HEAD
1
Emile Bergeron

Je viens de recevoir cette erreur avec le client de bureau Github (OSX). Tout ce que j'ai fait a été de quitter l'application et de la rouvrir. 

0
Oren