2010-03-01 5 views
77

J'ai une branche locale qui suit une branche distante. Pour les besoins du raisonnement, disent COMMIT histoires ressemblent à ceci:Git: rejeter toutes les modifications sur une branche locale divergente

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

Après avoir regardé le parent commettre des histoires, je veux maintenant rejeter toutes les modifications apportées à la branche phobos locale et obtenir de nouveau à être un lien direct copie de origin/phobos, de sorte que l'histoire locale ressemble à ceci:

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

Je ne veux vraiment pas les changements locaux à la branche phobos, et je ne veux vraiment pas se confond à se manifester dans le référentiel d'origine ensuite. (Donc, fusionner n'est pas ce que j'ai en tête.)

Cela semble devoir être très facile, mais mon google-fu m'a échoué. Comment puis-je faire cela?

Répondre

60

Supprimer la branche, puis recréer:

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

Génial. Cela a fonctionné parfaitement. –

+25

Un problème avec cette approche par rapport à la réinitialisation de la tête de la branche, est que la suppression de la branche évite le reflet de la branche. D'autre part, la réinitialisation de la branche préserve non seulement le reflog, mais enregistre en fait la réinitialisation dans le reflog. Cela rend l'opération facilement réversible plus tard, si nécessaire. –

+5

@Electrons_Ahoy Je vous suggérerais de changer la réponse acceptée ici pour celle de Dan (afin que les gens comme moi qui ont googlé comment le faire choisissent la méthode la plus sûre). –

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

Cela dit Git pour réinitialiser la tête de phobos au même engagement que origin/phobos et mettre à jour l'arbre de travail pour correspondre.

+24

OMI ceci devrait être la réponse acceptée; il émet la commande "reset" pour transplanter le pointeur de branche, au lieu d'effectuer une opération avec suppression/recréation. – vdboor

+0

En fait, j'ai essayé celui-ci d'abord et il a jeté une tonne d'erreurs en rendant la copie locale presque inutilisable. Supprimer/recréer a peut-être été moins élégant, mais je n'ai pas eu à poser de questions de suivi. –

+3

@Electrons_Ahoy: Hmm, ce n'est certainement pas normal. Faire cette réinitialisation devrait normalement être une opération sans problème si votre repo est en bon état de fonctionnement. –

Questions connexes