unfinished merging how cancelar aborting git version-control git-merge merge-conflict-resolution git-conflict-resolution

merging - git unfinished merge



Me encontré con un conflicto de fusión. ¿Cómo puedo abortar la fusión? (10)

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 que la mía es mala, por lo que todos mis cambios deberían abandonarse. ¿Cómo puedo hacer esto?


Como los comentarios sugieren que git reset --merge es un alias para git merge --abort , vale la pena notar que git merge --abort solo es equivalente a git reset --merge dado que MERGE_HEAD está presente. Esto se puede leer 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 deshacer con git reset --merge pero no necesariamente con git merge --abort , por lo que no solo son sintaxis antigua y nueva para la misma cosa .

Personalmente, encuentro que git reset --merge mucho más potente para escenarios similares a los descritos, y fallos en general se fusionan.


Creo que es git reset que necesitas.

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

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


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

git reset --hard HEAD

La otra pieza que desea es dejar que sus cambios anulen sus cambios.

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

git pull --strategy=theirs remote_branch

Pero esto ya ha sido eliminado, como lo explica Junio ​​Hamano (el mantenedor de Git) en este mensaje . Como se señaló en el enlace , en su lugar, haría esto:

git fetch origin git reset --hard origin


Desde Git 1.6.1.3 git checkout ha podido realizar el checkout desde cualquier lado de una combinación:

git checkout --theirs _widget.html.erb


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

No hay una necesidad particular de reiniciar y realizar una fusión con una estrategia diferente, tampoco. Los conflictos han sido resaltados correctamente por git y el requisito de aceptar los cambios del otro lado es solo para este archivo.

Para un archivo no fusionado en un conflicto, git pone a disposición las versiones comunes, locales y remotas del archivo en el índice. (Aquí es donde se leen para usarlos en una herramienta de diferencias de 3 vías de 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 sencilla de resolver el conflicto para usar la versión remota de forma literal es:

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


Encontré que lo siguiente funcionó para mí (revertir un solo archivo para pre-fusionar el estado):

git reset *currentBranchIntoWhichYouMerged* -- *fileToBeReset*


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, asegúrese de no tener cambios no confirmados antes de comenzar una fusión.

De la página del manual de git merge.

git merge --abort es equivalente a git reset --merge cuando MERGE_HEAD está presente.

MERGE_HEAD está presente cuando hay una fusión en curso.

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

Si tiene cambios que no desea realizar antes de iniciar una fusión, simplemente git stash antes de que la fusión y git stash pop después de terminar la fusión o abortar.


Una alternativa, que preserva el estado de la copia de trabajo es:

git stash git merge --abort git stash pop

Por lo general, desaconsejo esto, porque en realidad es como fusionarse en Subversion, ya que elimina las relaciones de rama en el siguiente compromiso.


Y si terminas con un conflicto de combinación y no tienes nada que comprometer pero aún así se muestra el error de combinación después de aplicar todos los comandos mencionados a continuación,

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

por favor eliminar

.git / index.lock

Archivo [cortar pegar en 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 ayude!!!


git merge --abort

Anule el proceso de resolución de conflictos actual e intente reconstruir el estado de fusión previa.

Si hubo cambios no confirmados en el área de trabajo cuando se inició la fusión, git merge --abort en algunos casos no podrá reconstruir estos cambios. Por lo tanto, se recomienda confirmar o guardar siempre los cambios antes de ejecutar git merge.

git merge --abort es equivalente a git reset --merge cuando MERGE_HEAD está presente.

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