2013-06-11 13 views
7

ho questa situazione: Lavorando su alcuni testBranch per qualche tempo e ho voluto per la sincronizzazione con il maestro così ho fatto git testBranch checkout e git unione master/testBranchUndo git avanzamento rapido unire

Così ora mio ramo è sincronizzato con il master ma poi ho scoperto che voglio annullare quell'unione e il problema è che l'unione viene eseguita con l'avanzamento veloce e ora la cronologia dei commit è mista a commit master e testingBranch si impegna e non so come ripristinare lo stato prima di unirmi al mio testBranch.

Grazie per qualsiasi aiuto

+0

I commit vengono uniti da 'master/testBranch' situato * al tip * del tuo' testBranch' o sei già riuscito a registrare diversi commit locali su quello che è stato unito? Il modo di recuperare pesantemente dipende da questo. – kostix

risposta

4

Se siete a conoscenza di una revisione in cui si desidera che il testBranch locale, è semplice come:

git checkout testBranch 
git reset --hard <revision> 

Se si dispone di modifiche mescolati come (più antico in cima):

<point> 
<your_change_a> 
<change_from_someone_else> 
<your_change_b> 
<testBranch> 

Si potrebbe:

git checkout testBranch 
git reset --hard <point> 
git cherry-pick <your_change_a> 
git cherry-pick <your_change_b> 
+1

Questo dovrebbe funzionare. Ti consiglio inoltre di utilizzare un visualizzatore grafico Git come gitg o gitk per ottenere una buona panoramica delle modifiche che desideri annullare. – RyPeck

+1

Grazie per la tua risposta, ma ho trovato un'altra soluzione (non ho provato la tua ma suppongo che funzioni). La soluzione è trovata in questo blog: http://blog.tplus1.com/blog/2011/09/23/undo-a-fast-forward-git-merge/ ... spero che aiuti qualcun altro a :) .. –

16

git reflog show testBranch

deve mostrare l'unione di avanzamento veloce come ultimo elemento ({0}). Dopo essersi assicurati questo è il caso, cassa testBranch e poi basta fare

git reset --keep [email protected]{1}

Per ripristinare lo stato precedente.

+0

Questa è una buona risposta. Vorrei aggiungere che è importante assicurarsi di eseguire il test di prova su Branch prima di eseguire 'git reset' – jbll

+0

Un approccio semplice e intuitivo! Questo dovrebbe essere contrassegnato come una risposta – anthonymonori

Problemi correlati