Estoy enfrentando un conflicto de fusión. ¿Cómo puedo interrumpir la fusión?

git pull y tuve un conflicto de fusión:

 unmerged: _widget.html.erb You are in the middle of a conflicted merge. 

Sé que la otra versión del archivo es buena y mi ajedrez, por lo que todos mis cambios deberían revertirse. ¿Cómo puedo hacer esto?

1947
19 сент. establecido por Gwyn Morfey el 19 de septiembre 2008-09-19 16:21 '08 a las 4:21 pm 2008-09-19 16:21
@ 10 respuestas

Dado que su pull no tuvo éxito, entonces HEAD (no HEAD^ ) es el último compromiso "válido" en su hilo:

 git reset --hard HEAD 

La otra parte que desea es permitir que sus cambios excedan sus cambios.

Las versiones anteriores de git le permitieron usar la estrategia de fusión "ellos":

 git pull --strategy=theirs remote_branch 

Pero desde entonces se ha eliminado, como se describe en este post de Junio ​​Hamano (que acompaña a git). Como se indica en el enlace , en su lugar hará lo siguiente:

 git fetch origin git reset --hard origin 
1752
19 сент. Respuesta dada por Pat Notz el 19 de septiembre. 2008-09-19 17:33 '08 a las 17:33 2008-09-19 17:33

Si su versión de git es> 1.6.1, puede usar git reset --merge .

Además, como @Michael Johnson menciona, si su versión de git es> 1.7.4, también puede usar git merge --abort .

Como siempre, antes de iniciar una fusión, asegúrese de no tener cambios no confirmados.

En la página del manual de git merge .

border=0

git merge --abort equivalente a git reset --merge cuando MERGE_HEAD presente.

MERGE_HEAD presente cuando se realiza la fusión.

Además, con respecto a los cambios no confirmados al iniciar una fusión:

Si tiene cambios que no desea hacer antes de comenzar una fusión, simplemente git stash antes de fusionar y git stash pop después de que se complete o cancele la fusión.

1610
29 марта '10 в 2:16 2010-03-29 02:16 La respuesta la da Carl el 29 de marzo de 2010 a las 2:16. 2010-03-29 02:16
 git merge --abort 

Anule el proceso de resolución de conflictos en curso e intente restaurar el estado de fusión previa.

Si hubo cambios no operativos en la situación de trabajo que estaban presentes cuando comenzó la fusión, git merge --abort en algunos casos no podrá recuperar estos cambios. Por lo tanto, se recomienda que siempre registre o registre sus cambios antes de ejecutar git merge.

git merge --abort equivalente a git reset --merge cuando MERGE_HEAD .

http://www.git-scm.com/docs/git-merge

382
13 нояб. respuesta dada ignis 13 nov. 2012-11-13 00:40 '12 a las 0:40 2012-11-13 00:40

En este caso de uso en particular, realmente no desea romper la fusión, solo resuelva el conflicto de cierta manera.

No hay una necesidad especial de reiniciar y fusionarse con otra estrategia. Los conflictos se asignaron correctamente con git, y el requisito de aceptar cambios por parte de terceros es solo para este archivo.

Para un archivo no relacionado en un conflicto, git proporciona una base compartida disponible, versiones locales y remotas del archivo en el índice. (Aquí se leen para su uso en la herramienta de diferencias de tres vías con git mergetool ). Puede usar git show para verlos.

 # common base: git show :1:_widget.html.erb # 'ours' git show :2:_widget.html.erb # 'theirs' git show :3:_widget.html.erb 

La forma más fácil de resolver un conflicto es usar la versión remota literalmente:

 git show :3:_widget.html.erb >_widget.html.erb git add _widget.html.erb 

O bien, con git> = 1.6.1:

 git checkout --theirs _widget.html.erb 
73
20 сент. Respuesta dada por CB Bailey 20 sep. 2008-09-20 13:41 '08 a la 1:41 pm 2008-09-20 13:41

Creo que necesitas git reset .

Tenga en cuenta que git revert significa algo muy diferente de, por ejemplo, svn revert - en Subversion, una devolución descartará sus cambios (no confirmados), devolviendo el archivo a la versión actual desde el repositorio, mientras que git revert "deshace" la confirmación.

git reset debería hacer el equivalente a svn revert , es decir, descartar los cambios no deseados.

72
19 сент. Respuesta dada por David Precious el 19 de septiembre. 2008-09-19 16:25 '08 a las 4:25 pm 2008-09-19 16:25

Dado que los comentarios asumen que git reset --merge es un seudónimo para git merge --abort , vale la pena señalar que git merge --abort equivalente a git reset --merge solo si hay un MERGE_HEAD . Esto se puede encontrar en la ayuda de git para el comando de combinación.

 git merge --abort is equivalent to git reset --merge when MERGE_HEAD is present. 

Después de una fusión fallida, cuando no hay MERGE_HEAD , la fusión fallida se puede cancelar con git reset --merge , pero no necesariamente con git merge --abort , por lo que no son solo la sintaxis antigua y nueva de la misma cosa .

Personalmente, me parece que git reset --merge mucho más poderoso para escenarios como el descrito y las fusiones fallidas en general.

29
02 апр. La respuesta es dada por Martin 02 Abr. 2015-04-02 15:16 '15 a las 15:16 2015-04-02 15:16

Desde Git 1.6.1.3 git checkout capaz de verificar en ambos lados de la fusión:

 git checkout --theirs _widget.html.erb 
16
17 июля '10 в 4:29 2010-07-17 04:29 La respuesta fue dada a Alain O'Dea el 17 de julio de 2010 a las 4:29 2010-07-17 04:29

Una alternativa para preservar el estado de una copia de trabajo es:

 git stash git merge --abort git stash pop 

Generalmente desaconsejo esto, porque es tan efectivo como una fusión en Subversion, ya que descarta la relación de bifurcación en la siguiente confirmación.

14
13 июля '10 в 21:57 2010-07-13 21:57 La respuesta la da Alain O'Dea el 13 de julio de 2010 a las 21:57 2010-07-13 21:57

Y si finaliza el conflicto de combinación y no tiene nada que cometer, pero el error de combinación se muestra después de que se aplican todos los siguientes comandos,

 git reset --hard HEAD git pull --strategy=theirs remote_branch git fetch origin git reset --hard origin 

quitar

.git \ index.lock

Archivo [corte el pegado a otra ubicación en caso de recuperación], y luego ingrese cualquiera de los siguientes comandos dependiendo de la versión que desee.

 git reset --hard HEAD git reset --hard origin 

Espero que esto ayude !!!

9
11 апр. La respuesta la da Nirav Mehta el 11 de abril. 2018-04-11 00:26 '18 a las 0:26 2018-04-11 00:26

Encontré lo que funcionó para mí (devolver un archivo al estado previo a la fusión):

 git reset *currentBranchIntoWhichYouMerged* -- *fileToBeReset* 
1
31 окт. Malcolm Boekhoff da la respuesta el 31 de octubre. 2017-10-31 03:56 '17 a las 3:56 2017-10-31 03:56