2012-02-04 10 views
49

Siempre que trato de empujar en Git me sale esto:Git "No ha concluido su fusión" y no hay nada que comprometer?

You have not concluded your merge (MERGE_HEAD exists). 
Please, commit your changes before you can merge. 

Correr git status me sale:

# On branch master 
nothing to commit (working directory clean) 

o correr git ls-files -u no consigo nada.

Correr git add . y volver a intentarlo no hace la diferencia.

¿Qué pasa?

Respuesta

87

Bien, finalmente encontré la respuesta: git commit -m "Test" aparentemente solucionó esto. El resultado fue una confirmación vacía sin cambios en absoluto. Incluso Github muestra una confirmación vacía, pero funciona.

+1

thaaaaank youuuuuuuuu! – koenmetsu

+1

Para mí, esto apareció como el compromiso que marcó el punto de fusión, por lo que un mensaje como "Combinar dev en maestro" sería más apropiado que "Prueba". –

+1

Wow. Ahora, ¿alguien puede explicar por qué esto funciona, pero 'git commit' no? – user1205577

46

¿Terminaste con una confirmación de fusión vacía (dos padres) o solo una confirmación vacía? En este último caso, podría haber eliminado .git/MERGE_HEAD.

Actualización: En lugar de eliminar MERGE_HEAD a mano, usted podría también utilizar git merge --abort (as of git 1.7.4) o git reset --merge (as of git 1.6.2).

También vale la pena mencionar que, al menos a partir de git 1.8.3 (tal vez antes?) Debería ver un mensaje status así si una combinación real está en curso y necesita ser confirmado (si ha especificado --no-commit, por ejemplo,):

# On branch master 
# All conflicts fixed but you are still merging. 
# (use "git commit" to conclude merge) 
# 
nothing to commit, working directory clean 

Si no ves esto y aún así obtener la MERGE_HEAD advertencia, algo que está en mal estado y se debe probablemente sólo --abort para volver a un estado limpio.

Detalle adicional de Comentarios

Durante una combinación, git crea un archivo MERGE_HEAD en la raíz de la carpeta .git (junto a la cabeza, ORIG_HEAD, probablemente FETCH_HEAD, etc.) para realizar un seguimiento de la información sobre la fusión de progreso (específicamente, los SHA (s) de la (s) confirmación (es) que se fusionan en la CABEZA actual). Si eliminas eso, Git ya no cree que una fusión está en progreso. Obviamente, si una fusión realmente está en progreso, entonces no querrá eliminar este archivo.

+2

Esta solución me parece más conveniente que cometer fusiones vacías, ya que esto sucede tan a menudo con git. –

+0

Gracias por esto. Ojalá realmente lo haya entendido. Cuando tenga tiempo, supongo que examinaré detenidamente los documentos. – Taylor

+3

Durante una fusión, git crea un archivo 'MERGE_HEAD' en la raíz de la carpeta' .git' (junto a 'HEAD',' ORIG_HEAD', probablemente 'FETCH_HEAD', etc.) para rastrear información sobre la fusión en progreso (específicamente , SHA (s) de la (s) confirmación (es) fusionadas en la 'CABEZA' actual ('HEAD'). Si eliminas eso, Git ya no cree que una fusión está en progreso. Obviamente, si una 'fusión 'realmente _es_ en progreso, entonces no querría eliminar este archivo. – dahlbyk

7

Mi salvavidas fue git reset comando.

Cuestiones relacionadas