2010-03-01 13 views
77

Ho un ramo argomento locale che sta monitorando un ramo remoto. Per amor di discussione, dicono le storie di commit simile a questa:Git: Ignora tutte le modifiche su un ramo locale divergente

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

aver guardato la relativa commettere storie, io ora voglio scartare tutte le modifiche al phobos filiale locale e farlo ritornare ad essere una diretta copia di origin/phobos, in modo che la storia locale si presenta così:

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

io davvero non voglio le modifiche locali al ramo phobos, e io non voglio nessun fonde di presentarsi nel repository di origine successivamente. (Quindi, la fusione non è quello che ho in mente.)

Sembra che dovrebbe essere davvero facile, ma il mio google-fu mi ha fallito. Come faccio a fare questo?

risposta

60

Eliminare il ramo, poi ricrearlo:

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

Impressionante. Questo ha funzionato perfettamente. –

+25

Un problema con questo approccio rispetto al ripristino della testa del ramo, è che l'eliminazione del ramo soffia via il reflog del ramo. Resettare il ramo, d'altra parte non solo conserva il reflog, ma in realtà registra il reset nel reflog. Ciò rende l'operazione facilmente reversibile in seguito, se necessario. –

+5

@Electrons_Ahoy Suggerirei di cambiare la risposta accettata qui a quella di Dan (in modo che le persone come me che hanno cercato su Google come farlo scelgano probabilmente il metodo più sicuro). –

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

Questo dice Git per azzerare il capo della phobos allo stesso compiere come origin/phobos, e per aggiornare l'albero di lavoro da abbinare.

+24

IMO questa dovrebbe essere la risposta accettata; emette il comando "reset" per trapiantare il puntatore del ramo, invece di eseguire un intervento chirurgico con rimozione/ricreazione. – vdboor

+0

In realtà, ho provato questo in primo luogo e ha gettato un sacco di errori rendendo quasi inutilizzabile dalla copia locale. Cancellare/ricreare potrebbe essere stato meno elegante, ma non ho dovuto porre domande di follow-up. –

+3

@Electrons_Ahoy: Hmm, non è assolutamente normale. Effettuare questo reset dovrebbe essere normalmente un'operazione senza problemi se il repository è in buone condizioni. –

Problemi correlati