Obteniendo un error fatal en git para entradas de etapas múltiples

241

Usando Git versión 2.2.0 con la unidad del motor de juego en OS X, y quería confirmar mi código. Agregué todo y no recibí un mensaje de error. luego confirma -m, y recibí este mensaje de error:

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

No me di cuenta de que presioné, eso no dio un mensaje de error, de hecho dijo Everything up-to-date Así que verifiqué bitbucket (donde se lleva a cabo el repositorio) y no mostró mi confirmación. así que revisé mi registro local y eso tampoco muestra mi confirmación.

He buscado en Google una respuesta ... y nada. ¿Qué es este error? y como puedo arreglarlo?

Daniel Toebe
fuente
¿Qué versión de git o herramienta estás usando? Ha habido un hilo reciente en la lista de desarrolladores sobre cómo mejorar la verificación de entradas de etapas múltiples. news.gmane.org/gmane.comp.version-control.git
Philip Oakley
Parece probable que la verificación adicional en 2.2.0 pueda estar involucrada. "Asegúrese de que se eliminen las entradas no fusionadas" 12 de agosto por Jaime Soriano Pastor, puede ser un hilo para comenzar.
Philip Oakley
44
¿Entonces, por qué pasa ésto?
Charlie Parker
simplemente haga una edición ficticia en dicho archivo y 'confirme y sincronice'.
sajanyamaha
Nota: consulte también stackoverflow.com/a/51919644/6309
VonC

Respuestas:

381

La primera solución, que parece funcionar con versiones recientes de Git (2.3 +, + Q2 2015) se menciona en subvención 's más hasta a la fecha de respuesta :

  1. Eliminar el índice

    $ rm .git/index
    
  2. Añadir todo

    $ git add -A
    
  3. Cometer

    $ git commit -a
    

Respuesta original (finales de 2014)
La solución habitual es:

  • clonar nuevamente el repositorio remoto en un nuevo repositorio local
  • agregue los cambios del primer repositorio al segundo:

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

Puede ver este mensaje de error en read-cache.c, discutido en este parche (" read-cache.c: Asegúrese de que se eliminen las entradas no fusionadas "), e introducido en la confirmación de Git 2.2 .
Como esto es tan reciente, es posible que degradar Git a 2.1 sea suficiente para no verse afectado por ese parche.

El OP Daniel Toebe agrega en los comentarios :

El problema ocurrió en mi macbook, que decidió fallar en mí, y otro error de la computadora me retrasó mucho en mis proyectos.

VonC
fuente
@sharpner es posible que sea un error o un efecto secundario de ese parche en su caso.
VonC
1
Perdón por la respuesta tardía ... El problema ocurrió en mi macbook, que decidió fallar en mí, y otro error de la computadora me retrasó en mis proyectos.
Daniel Toebe
1
@DanielToebe buenos comentarios. Lo he incluido en la respuesta para mayor visibilidad.
VonC
Me acabo de encontrar con el mismo, después de un intentogit commit -c sha
Chris Leishman
2
Para todos los interesados, esto me sucedió porque estaba editando accidentalmente un archivo en mi carpeta .git en lugar del archivo en sí.
ostler.c
166

Creo que encontré este problema porque agregué y cometí cambios y luego eliminé un archivo que acababa de confirmar. Si esto suena similar a su caso, le recomiendo seguir lo siguiente para guardar la re-clonación y agregar manualmente sus cambios.

Pude solucionar este problema eliminando el archivo .git / index en mi repositorio, similar a lo que sugirió @slider (creo que escribió mal la ruta).

rm .git/index

Luego tuve que agregar y confirmar mis cambios locales nuevamente

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

Entonces pude empujar a distancia.

¿Qué es el índice git y cómo es relevante?

¿Cuál es el trato con el índice Git?

El "índice" de git es donde coloca los archivos que desea que se comprometan en el repositorio de git.

Antes de “confirmar” (registrar) archivos en el repositorio de git, primero debe colocar los archivos en el “índice” de git.

Creo que al eliminar este archivo, git volverá a indexar el repositorio, creará uno nuevo y listo. Resuelve este problema porque el repositorio local se vuelve a indexar sin el archivo que eliminé que causó todo el alboroto.

Editar: Parece que esto está relacionado con Mac (según los comentarios), así que si ayuda, estoy en OSX 10.10 y git versión 2.3.4 instalado a través de brew.

conceder
fuente
1
Sí, esto funcionó y gracias por la explicación. Una advertencia aquí es antes de hacer esto: ocultar o mover o eliminar cualquier archivo que no haya agregado a la lista de cambios predeterminada actual. Serán absorbidos de nuevo con elgit add -A
Kirby
44
Confirme esto en Mac OS X Yosemite. Sucedió mientras trabajaba en Android Studio, aunque no hubo un escenario reproducible específico ...
Drew
44
Esta debería ser la respuesta correcta porque funciona y tiene una mejor explicación. Esto también me pasó a mí también.
Jared Burrows
1
Trabajó para mí también. Agregar la raíz de control de versión en IntelliJ lo corrompió, pero ejecutar el índice git funcionó bien. Gracias por la explicación @grant.
Andrew Eells
1
También tuve este problema cuando IntelliJ se estaba ejecutando en segundo plano mientras hacía algunas modificaciones con vim. Creo que hubo una condición de carrera en git. (En realidad, creo que hay muchos de ellos). Cerrar IntelliJ, eliminar el índice y volver a comprometer mi trabajo funcionó bien.
Robert Fischer
119

Para proyecto

rm .git/index
git reset

después de eliminar el índice, debe volver a crearlo mediante git reset

Para submódulo:

Ir a la carpeta principal del proyecto

rm .git/modules/your_project_structure/index
git reset --hard HEAD
farincz
fuente
44
El reinicio de git después de la eliminación del índice lo clavó por completo. ¡Gracias! Si no restablece, todos los archivos serán nuevos en el índice, por lo que debe agregarse. Restablecer reconstruirá el índice que parece. ¿Aunque no entiendo cómo git puede reconstruir el índice, sin un índice?
JosFabre
1
@JosFaber Porque el índice no es historial de confirmación. En realidad es una estructura auxiliar "redundante". Consulte schacon.github.io/gitbook/7_the_git_index.html Para que se pueda reconstruir por completo comparando el árbol de trabajo y HEAD. Y eso es exactamente lo que hace git reset. La página de
manual
2
¡Gracias! Sin el restablecimiento de git, quería que volviera a agregar todos los archivos que ya están en el repositorio.
Robert Bernstein
1
Yo uso sourcetree en mi mac. Eliminé manualmente el .git / index, luego seleccioné el último buen commit, hice clic derecho, seleccioné reset master (en mi caso) para este comentario, luego elegí la opción mixta que deja mi trabajo en buen estado. Entonces pude hacer un compromiso de mi trabajo actual y todo está sano ahora.
user216661
1
¡La forma más limpia y rápida!
h4rd4r7c0r3
29

Puede eliminar el archivo de índice Git de su proyecto. En la raíz de su proyecto, ejecute el siguiente comando:

rm .git/index

Después de eso, funciona.

control deslizante
fuente
3
Esto no responde la pregunta. Desarrolle esta respuesta con más detalles.
ArtOfCode
No funcionó para mí rm: /.git/index: No such file or directoryMac OSX Yosemite; git 2.3.4 instalado a través de homebrew
otorga
@grant Tienes que eliminar la barra al principio. ( rm .git/indexen su directorio git).
ChristophLSA
2
@ ChristophLSA gracias - respondí con una descripción de lo que hace esta acción para proporcionar claridad. ¿Se puede actualizar esta respuesta para reflejar el camino correcto e informar a los usuarios de lo que hace la acción?
conceder
1
Sé por qué esto funciona. El problema es causado por un índice dañado. Me encontré con este problema cuando corrompí el índice modificando el código en IntelliJ mientras escribía un mensaje de confirmación en la línea de comando. Eliminar el índice no destruye sus cambios, simplemente los desestabiliza.
Pirolítico
3

Intento una solución diferente y funciona para mí. Abajo están mis opciones

#cd .git
#rm index
#cd ..
#git add .
wqycsu
fuente
Como dijo @farincz, debe volver a crear el índice llamando de lo git resetcontrario fatal: Could not reset index file to revision 'HEAD' .
kuskmen
1

Si esto sucede en un submódulo

El archivo de índice se encuentra dentro del .gitdirectorio principal :

.git/modules/your_project_structure/index

En un submódulo, no hay directorios nombrados .git(al menos en el proyecto en el que estoy trabajando), solo hay un .gitarchivo que le dice (y git) dónde buscar el directorio git de ese proyecto.

El estado de Git muestra cambios que no hice

Después de eliminar los archivos de índice y hacer un git reset, me encontré con muchos cambios inexplicables y un restablecimiento completo no estaba ayudando.

Advertencia , perderá todos sus cambios, así que confírmalos y presione antes de continuar.

El índice parecía dañado, así que lo eliminé con los siguientes comandos.

git rm -rf --cached .
git reset --hard HEAD
Emile Bergeron
fuente
0

Acabo de recibir este error con el Github Desktop Client (OSX). Todo lo que hice fue salir de la aplicación y volver a abrirla y luego comenzó a funcionar.

Oren
fuente