2011-05-10 8 views
33

Acabo de realizar algunos cambios en una de mis ramas de características ("feedback_tab"), luego, compruebo "master" y los fusioné allí. De hecho, quise fusionarlos en mi rama de "desarrollo".Deshacer una fusión de git (no se ha enviado aún)

Ahora, el master está por delante de 'origin/master' (su control remoto) por 17 commits - No he forzado la fusión (y no quiero, obviamente). ¿Cómo puedo revertir al maestro al mismo estado que antes de la fusión accidental? Estoy confundido entre git revert y git reset con esto.

Miré en mi log git y no hay ninguna entrada para unir feedback_tab en master. Pensé que sería la entrada principal.

Bit confused:/any help welcome! max

+0

@myself: Oh querido, cariño, debería haber leído las preguntas frecuentes: "herramientas de software utilizadas comúnmente por los programadores". – orlp

Respuesta

33

git reset --hard HEAD~17 le devuelve 17 compromisos antes de la cabeza del maestro. git rebase -i HEAD~17 probablemente se deshace de los compromisos extra también.

+0

Gracias Tamas. Las primeras opciones parecen haber funcionado bien. –

+22

Es posible que desee utilizar 'reset --merge'. Eso hace lo mismo si la fusión fue lo único que sucedió, pero si tenía modificaciones locales (a archivos no afectados por la fusión) los deja en su lugar en lugar de destruirlos como '--hard'. – Cascabel

+13

También podría hacer 'git reset --hard origin/master' – Karl

12

Tomado de git reset

Undo a merge or pull 

    $ git pull       <1> 
    Auto-merging nitfol 
    CONFLICT (content): Merge conflict in nitfol 
    Automatic merge failed; fix conflicts and then commit the result. 
    $ git reset --hard     <2> 
    $ git pull . topic/branch   <3> 
    Updating from 41223... to 13134... 
    Fast-forward 
    $ git reset --hard ORIG_HEAD  <4> 
45

Para deshacer una combinación que no se presionó:

git reset --merge ORIG_HEAD 

Si durante la fusión obtiene un conflicto, la mejor manera de deshacer la fusión es:

git merge --abort 
+0

gracias, esto es muy claro y hasta el punto de la pregunta. También funciona. =) –

+0

¡Esto me ayudó! Gracias –

3

¡Esta seguramente funcionará!

git reset --hard HEAD~1 
git init 

La primera de ellas será revertir los cambios realizados recientemente (la fusión) el segundo será el repositorio init a la última (por lo tanto, avanzará rápidamente a más tardar en el origen)

He intentado

git reset --merge 

pero no funcionó.

Cuestiones relacionadas