Hice lo mismo hoy, y tomé un enfoque diferente (después de la prueba y el error) para volver al estado justo antes de esconderme para poder continuar resolviendo conflictos y completar la fusión.
Primero, después de eliminar la fusión parcial en la rama de destino, capturé una lista de los archivos con los conflictos restantes (archivo de texto o pestaña del editor). Esta es solo la lista de archivos sin grabar luego de eliminarla, ya que los archivos con conflictos ya resueltos se habrían configurado antes del bloqueo.
$ git status
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: myproject/src/main/java/com/acme/package3/Class3.java
# modified: myproject/src/main/java/com/acme/package3/Class4.java
#
A continuación, he creado un parche y restablecer la rama de nuevo al estado de pre-fusión:
$ git diff HEAD > ~/merge-with-resolved-conflicts.patch
$ git reset --hard HEAD
Entonces creó una rama temporal (derivado de la rama de destino de combinación), y se aplica el parche:
$ git checkout -b my-temp-branch
$ git apply ~/merge-with-resolved-conflicts.patch
$ git commit -a -m "Merge with resolved conflicts"
manera que la cabeza de mi-temp-rama ahora contiene todo lo que se fusionó, incluyendo los archivos con conflictos resueltos, y los archivos con conflictos restantes.
Entonces cambió de nuevo a la rama original, se fusionó de nuevo, y se veía en el estado git
$ git checkout my-branch
$ git merge other-branch
$ git status
El estado muestra la lista completa de los archivos con conflictos:
# Unmerged paths:
# (use "git add <file>..." to mark resolution)
#
# both modified: myproject/src/main/java/com/acme/package1/Class1.java
# both modified: myproject/src/main/java/com/acme/package2/Class2.java
# both modified: myproject/src/main/java/com/acme/package3/Class3.java
# both modified: myproject/src/main/java/com/acme/package3/Class4.java
#
Ahora Necesitaba compare estas dos listas de archivos. Cualquier archivo en la segunda lista pero no el primero ya se había resuelto (en este ejemplo, Class1.java y Class2.java). Así que para cada uno de esos archivos, tiré en la versión con conflictos resueltos de la rama temporal (como la cereza-escoge, pero para archivos individuales en lugar de un envío entero):
$ git checkout my-temp-branch myproject/src/main/java/com/acme/package1/Class1.java
$ git checkout my-temp-branch myproject/src/main/java/com/acme/package2/Class2.java
Una vez hecho esto, yo estaba de vuelta al estado anterior al alijo, para poder reanudar la resolución de los conflictos restantes y comprometer la fusión.
¿Hiciste realmente algo significativo? (¿De verdad necesita restaurar los cambios escondidos?) ¿Puede restablecer el intento de fusión, y hacerlo de nuevo? – Cascabel
Sí y no, respectivamente. Los cambios consisten en más de un día de resolución de conflicto de fusión. – bukzor
@bukzor: si necesita más de un día para fusionar la resolución de conflictos, podría ser hora de reconsiderar sus políticas con respecto a la gestión de sucursales y la distribución del trabajo (o la frecuencia de fusión). Dichas resoluciones de fusión prolongadas son, después de todo, una buena fuente de errores difíciles de encontrar debido a la cantidad de cambios realizados en una confirmación – Grizzly