2011-05-13 7 views
21

Título original: GIT - Actualiza todos los archivos que no se han cambiadoGIT - errores después de conflictos de fusión durante la emergencia alijo

Actualmente estoy tratando de actualizar todos los archivos en un repositorio Git que no se han cambiado. Digamos por ejemplo que tengo:

  • test1.py
  • test2.py

test1.py se ha modificado localmente, mientras que los dos archivos se han modificado de forma remota. Ahora he intentado:

git stash 
git pull 
git stash pop 

cual restauró mis cambios, y me da una advertencia de que necesito para combinar test1.py. Hasta aquí todo bien. El problema surge cuando trato de hacer el mismo proceso nuevamente (después de que ambos archivos hayan sido cambiados de nuevo remotamente). Git ahora dice

unmerged (6b126638f7c63aa648609afa60ab972a2403502b) 
fatal: git-write-tree: error building trees 
Cannot save the current index state 

lo que me pone un poco triste. Simplemente quiere algo simple: actualizar todos los archivos que no he cambiado. Me ocuparé de fusionarme más tarde.

+0

Una nota más: con Git, en realidad no se rompen los commits.Cuando tira, obtiene * todos * los cambios, ya sea que haya cambiado esos archivos o no. Después de aplicar (pop) sus cambios ocultos, termina con la combinación de los cambios (a través de una fusión, detrás de las escenas). Tu objetivo de actualizar solo los archivos que no has modificado no tiene mucho sentido. – Cascabel

Respuesta

27

Resolvió el conflicto en su archivo (¿tal vez? Vea la nota al pie), pero Git no sabe si terminó o no. Tienes que indicarle a git que has terminado de resolver ese conflicto. (De lo contrario, si te deja seguir y no lo has resuelto, puedes encontrar todo tipo de formas de dispararte en el pie.)

Por lo que sé, la forma de hacerlo es:

git add <file>  # stage the resolved version, which marks it as resolved 
git reset HEAD <file> # unstage the changes, leaving the resolution just in the work tree 

parece que debe haber una manera de hacer las dos cosas a la vez con update-index pero no es obvio para mí de un rápido vistazo. (Pero, de nuevo, para los conflictos de fusión reales, Nunca desea marcar un conflicto como resuelto sin la organización de los contenidos, es sólo para los alijos que esto plantea.)

Y como dice VonC en su respuesta, si esto sucede De nuevo, puede ver fácilmente qué cosas tuvieron conflictos de combinación al aplicar el alijo usando git status. Aparecerán en rojo (si tiene color) y dirá unmerged (o quizás deleted by us/them si fue un conflicto de eliminación/modificación).

Nota al pie: Mirando hacia atrás a tu pregunta, no puedo decir si resolviste los conflictos o no, dijiste "hasta ahora todo bien". La "advertencia" que vio realmente significa una sugerencia para resolver los conflictos de inmediato. Los conflictos surgieron al tratar de combinar los cambios que realizó con los cambios que había guardado. Tienes que resolver ese conflicto y poner tu árbol de trabajo en un estado constante antes de que puedas avanzar de cualquier forma. Enfrentarlo de la misma manera que lo haría con un conflicto de fusión: busque en el archivo, encuentre los marcadores de conflicto, ¡descubra qué contenido debe guardar! (Y luego mira hacia atrás para saber cómo terminar.)

+0

No vi su respuesta de inmediato. +1 para el procedimiento claro a seguir. – VonC

+0

Traté de seguir esto. Después de los comandos sugeridos intenté 'git stash pop' nuevamente, pero todavía no funciona. Ahora dice "error: sus cambios locales en los siguientes archivos se sobrescribirán por fusión: " –

+0

Tuve el mismo problema que @Dave Cohen. Pude resolverlo usando 'git checkout -f ', que (¡advertencia!) Lanza cualquier cambio local. – James

2

Eso debería significar que tu segundo alijo no funciona debido a la fusión aún no resuelta.
Vea este SO question que ilustra el mismo mensaje de error en un alijo.

Esto thread confirms que un árbol no puede contener archivos no fusionados.

You have a tree with unmerged entries.
Why don't you look into the issue and solve it?
A simple " git status " should show you what are the unmerged entries. A simple look at those files should show you conflict markers.

Resolve the issue, commit, continue.

Cuestiones relacionadas