Abortar una combinación de Git

119

Estoy trabajando en un proyecto utilizando Git como VCS. Me xyzcortaron una rama de la rama principal del maestro. Después de trabajar por un tiempo, comprometí mi código y tomé un tirón de la línea principal de la rama.

El tirón estuvo bien. Luego fusioné el código con master. Después de la fusión, hubo problemas en ciertos archivos. No he comprometido el código después de la fusión. ¿Alguien puede orientarme sobre cómo puedo abortar esta fusión y llevar mi rama en la que estoy trabajando actualmente al estado en el que estaba antes de fusionarla?

Salman Kazmi
fuente
¿No puedes simplemente restaurar la confirmación anterior de la rama?
Wutipong Wongsakuldej
2
Posible duplicado de Cómo deshacer una fusión de git con conflictos
Scott Weldon
1
Tenga en cuenta que en Git, revertes el nombre de un comando que crea una nueva confirmación revirtiendo los cambios en una confirmación anterior, por lo que probablemente esa no sea la palabra que está buscando aquí. He editado tu pregunta para aclarar.
Scott Weldon

Respuestas:

296

siempre que no se haya comprometido, puede escribir

git merge --abort

tal como sugirió la línea de comando.

Timothy Truckle
fuente
4
Recibí este mensaje al intentar esto: error: Entry 'MyFile.java' not uptodate. Cannot merge. fatal: Could not reset index file to revision 'HEAD'.
SMBiggs
1
@Ahmad git no inicia una fusión con cambios no confirmados (de archivos ya rastreados) en su lugar. git no puede proteger lo que no conoce.
Timothy Truckle
Sí, lo aprendí perdiendo mi código. aquí hay un detalle de mi problema, cómo me encontré en el problema. stackoverflow.com/questions/55474092/how-to-undo-the-git-abort
Ahmad
23

Si hace "git status" mientras tiene un conflicto de fusión, lo primero que le muestra git es cómo abortar la fusión.

salida del estado de git mientras hay un conflicto de fusión

MLY
fuente
Bien, esto me sugirió git reset HEAD <file>que eliminé efectivamente el "fusionar" plegable del control de fuente de la extensión git => entonces podría resolver los conflictos o simplemente revertir mis cambios en la lista de extensiones GIT :)
jave.web
6

A decir verdad, hay muchos, muchos recursos que explican cómo hacer esto ya en la web:

Git: ¿cómo fusionar inversamente una confirmación?

Git: ¿cómo fusionar inversamente una confirmación?

Deshacer fusiones , del blog de Git (recuperado de Wayback Machine de archive.org)

Así que supongo que solo resumiré algunos de estos:

  1. git revert <merge commit hash>
    Esto crea una confirmación adicional de "reversión" que dice que deshiciste una combinación

  2. git reset --hard <commit hash *before* the merge>
    Este historial de restablecimiento a antes de realizar la fusión. Si tiene confirmaciones después de la fusión, las necesitará cherry-pickdespués.

Pero honestamente, esta guía aquí es mejor que cualquier cosa que pueda explicar, ¡con diagramas! :)

denis.lobanov
fuente
1
El vínculo se ha ido. Suspiro.
SMBiggs
@ScottBiggs Creo que lo movieron a git-scm.com/book/en/v2/… . Denis, si lees esto, ¿puedes comprobarlo? Y si realmente es lo mismo, ¿puede actualizar el enlace en su respuesta? ¡Gracias!
Fabio dice reinstalar a Monica