2012-07-19 8 views
7

He fusionado la rama beta en la rama principal. Empujé al origen. Ahora quiero que el maestro sea como era antes de la fusión tanto a nivel local como a distancia.¿Qué hash de confirmación para deshacer una fusión presionada usando git-revert?

una buena respuesta para undoing a merge that was already pushed sugiere

git revert -m 1 commit_hash 

Si este es el camino a seguir, ¿cómo puedo determinar commit_hash? Me intentó sin éxito el hash devuelto por merge-base:

$ git merge-base --all master beta 
1f4b949b7ef97abf913ae672e3acd0907abfac1b 
$ git revert -m 1 1f4b949b7ef97abf913ae672e3acd0907abfac1b 
error: Mainline was specified but commit 1f4b949b7ef97abf913ae672e3acd0907abfac1b is not a merge. 
fatal: revert failed 

He examinado tanto Git-log y gitk interpretaciones de las ramas, pero son muy largo, y no estoy seguro de lo suficiente de mi interpretación de sentir lo que debería busca ayuda antes de hacer un desastre quizás más grande. Beta se derivó de v2, que se derivó del maestro. Hubo algunas fusiones de master en v2 y beta en el camino ya que mantuve las nuevas ramas actualizadas con master. La fusión en la dirección de beta a maestro fue un error que deseo corregir.

Una vez que determine el punto de fusión, si encuentro algún compromiso en el maestro después de la fusión que realmente debería estar en la rama beta, ¿cuál es la mejor manera de moverlos?

+2

Pruebe 'log --all --graph --pretty = tformat: '% Cred% h% Creset -% C (amarillo)% d% Creset% s% Cgreen (% an% cr)% Creset' - abbrev-commit --date = relative' (Yo personalmente lo alijo), mostrará las confirmaciones de todas las ramas y su fecha, y también dónde ocurrieron las fusiones. –

Respuesta

4

Necesita encontrar la confirmación de la combinación, git merge-base le indica el compromiso donde puede realizar la fusión. Básicamente es el último compromiso que existe en esas dos ramas. El compromiso de fusión existe solo en su rama principal, a menos que haya creado una nueva rama después de la fusión, pero eso no es relevante aquí. :)

Para encontrar la combinación de cometer intento: git log master ^beta --ancestry-path --merges

El necesaria cometer es el último commit.

Pero, por favor leer sobre Linus redactar: ​​http://www.kernel.org/pub/software/scm/git/docs/howto/revert-a-faulty-merge.txt

1

También se fijan en http://sethrobertson.github.com/GitFixUm/ que camina a través de casi cualquier problema GIT, incluyendo fusiones impulsadas. Sin embargo ... las fusiones impulsadas no tienen una solución fácil.

Cuestiones relacionadas