Deshacer una combinación de Git que aún no se ha enviado

Resuelto Matt Huggins asked hace 14 años • 35 respuestas

Accidentalmente ejecuté git merge some_other_branchmi rama maestra local. No he enviado los cambios al maestro de origen. ¿Cómo deshago la fusión?


Después de fusionarse, git statusdice:

# On branch master
# Your branch is ahead of 'origin/master' by 5 commits.

¿Cómo deshago todas estas confirmaciones?

Matt Huggins avatar Mar 06 '10 02:03 Matt Huggins
Aceptado

Verifique git reflogqué confirmación es anterior a la fusión ( git reflogserá una mejor opción que git log). Luego puedes restablecerlo usando:

git reset --hard commit_sha

También hay otra manera:

git reset --hard HEAD~1

Te devolverá 1 compromiso.

Tenga en cuenta que cualquier archivo modificado y no confirmado/no almacenado se restablecerá a su estado no modificado . Para mantenerlos guardados, guarde los cambios o consulte --mergela opción a continuación.


Como @Velmont sugirió a continuación en su respuesta, en este caso directo usando:

git reset --hard ORIG_HEAD

podría producir mejores resultados, ya que debería preservar sus cambios. ORIG_HEADapuntará a una confirmación directamente antes de que se produzca la fusión, por lo que no tendrá que buscarla usted mismo.


Un consejo adicional es utilizar el --mergeinterruptor en lugar de --hardya que no restablece archivos innecesariamente:

git reset --merge ORIG_HEAD

--unir

Restablece el índice y actualiza los archivos en el árbol de trabajo que son diferentes entre <commit> y HEAD, pero mantiene aquellos que son diferentes entre el índice y el árbol de trabajo (es decir, que tienen cambios que no se han agregado).

Marcin Gil avatar Mar 05 '2010 19:03 Marcin Gil

Suponiendo que su maestro local no estuviera por delante de origen/maestro, debería poder hacerlo

git reset --hard origin/<branch-name>

Entonces, suponiendo que hayas hecho esto en master, entonces tu mastersucursal local debería verse idéntica a origin/master.

randomguy3 avatar Mar 17 '2011 18:03 randomguy3

Consulte el capítulo 4 del libro Git y la publicación original de Linus Torvalds .

Para deshacer una combinación que ya fue enviada :

git revert -m 1 commit_hash

Asegúrese de revertir la reversión si vuelve a confirmar la rama, como dijo Linus.

Yuri Geinish avatar Jun 02 '2011 16:06 Yuri Geinish