2010-03-01 13 views
77

Tengo una rama de tema local que está rastreando una rama remota. Por el bien del argumento, dicen las historias cometer este aspecto:Git: descartar todos los cambios en una rama local divergente

A--B--C--O1--O2--O3 (origin/phobos) 
     \ 
     L1--L2--L3 (phobos) 

Después de examinar la relación cometer historias, ahora quiero descartar todos los cambios en el phobos rama local y conseguir que volver a ser una directa copia de origin/phobos, por lo que la historia local es el siguiente:

A--B--C--O1--O2--O3 (phobos origin/phobos) 

realmente no quiero que los cambios locales en la rama phobos, y yo realmente no quiero cualquier fusión que aparecen en el repositorio de origen después. (Entonces, simplemente fusionar no es lo que tengo en mente.)

Parece que debería ser realmente fácil, pero mi google-fu me ha fallado. ¿Cómo hago esto?

Respuesta

60

Eliminar la rama, a continuación, volver a crearlo:

$ git branch -D phobos 
$ git checkout --track -b phobos origin/phobos 
+0

Impresionante. Esto funcionó perfectamente. –

+25

Un problema con este enfoque frente a la reinicialización de la cabeza de la bifurcación es que al eliminar la rama se borra el reflog de la bifurcación. Restablecer la bifurcación, por otra parte, no solo conserva el reflog, sino que realmente registra el reinicio en el reflog. Esto hace que la operación sea fácilmente reversible más adelante, si es necesario. –

+5

@Electrons_Ahoy Sugeriría que cambie la respuesta aceptada aquí a la de Dan (para que las personas como yo que han buscado en Google cómo hacerlo, puedan elegir el método más seguro). –

219
git checkout phobos 
git reset --hard origin/phobos 

Esto le dice a Git para restablecer la cabeza de phobos a cometer el mismo como origin/phobos, y para actualizar el árbol de trabajo para que coincida.

+24

IMO esta debería ser la respuesta aceptada; emite el comando "restablecer" para trasplantar el puntero de bifurcación, en lugar de realizar una cirugía con eliminación/recreación. – vdboor

+0

En realidad, probé esta primero y arrojó una tonelada de errores que hacen que la copia local casi no se pueda usar. Eliminar/recrear puede haber sido menos elegante, pero no tuve que hacer ninguna pregunta de seguimiento. –

+3

@Electrons_Ahoy: Hmm, eso definitivamente no es normal. Hacer este reinicio normalmente debería ser una operación libre de problemas si su repositorio está en buen estado de funcionamiento. –

Cuestiones relacionadas