2012-09-21 19 views
40

pasos que ha realizado:revertir una fusión después de ser empujado

Tengo dos ramas BRANCH1 y BRANCH2,

$git branch --Initial state 
$branch1 

$git checkout branch2 
$git pull origin branch1 --Step1 

resuelvo los conflictos e hicieron un

$git commit -m "Merge resolved" 

continuación

$git checkout branch1 
$git merge branch2 
$git push origin branch1 

Ahora i reali Supongo que estando en el paso 1, la fusión automática eliminó algún código y se insertó el código de cambio, ahora quiero volver a mi estado inicial para revertir cualquier cambio. ¿Estoy buscando alguna ayuda inmediata?

+0

¿Tiene git revert no hace lo que quiere? –

+1

da el mensaje como: fatal: Commit b4a758b36a5bde9311061fe7b56e4f47859de052 es una fusión, pero no se proporcionó la opción -m. @FrederickCheung – Bijendra

+0

Consulte el manual sobre la opción -m. http://www.kernel.org/pub/software/scm/git/docs/git-revert.html En breve puede usar -m 1 o -m 2. Esto selecciona a cuál de las dos revisiones principales desea revertir. –

Respuesta

56

Puede revertir la fusión siguiendo el official guide, sin embargo, esto deja a Git con la creencia errónea de que las confirmaciones fusionadas aún se encuentran en la rama de destino.

Básicamente, usted tiene que:

git revert -m 1 (Commit id of the merge commit) 
+16

Uno debe tener cuidado con el '1'. Significa el primer padre de la compilación de fusión. Pero si uno (hipotéticamente) 'accidentalmente' fusionó el maestro con la rama, entonces el maestro con envío rápido a la confirmación fusionada - uno debería usar '-m 2' para revertir la combinación en el maestro. –

+1

Tenga cuidado con ese '1'. Echó a perder mi repositorio invirtiendo parcialmente la fusión, mientras que yo quería revertir la fusión por completo. ¡Terminé revirtiendo la reversión! – Metallica

15

Pruebe usar git reflog <branch> para averiguar dónde estaba su sucursal antes de la fusión y git reset --hard para restaurar la revisión anterior.

Reflog le mostrará los estados más antiguos de la sucursal, por lo que puede devolverlo a cualquier cambio que desee.

Asegúrese de que está en la rama correcta cuando se utiliza git reset

para cambiar la historia repositorio remoto, puede hacerlo git push -f, sin embargo esto no es recomendable porque alguien todavia puede haber descargado cambios, empujados por ti.

+0

había empujado el código a la rama remota, ¿cómo revertirá el código desde allí ... – Bijendra

+1

si ya lo presionó, NO quieres volver a escribir la historia local, como Ilya describió –

+2

Lo siento, me he perdido esa cosa ... A veces puedes usar git push -f para reescribir el historial remoto. Esto depende de la configuración de tu repositorio remoto y de otros miembros del equipo (si no te matarán por ese empuje forzado). –

Cuestiones relacionadas