2009-06-10 14 views
35

Ho fatto accidentalmente 10 commit sul ramo "testing" quando intendevo impegnarli sul ramo "master". Gli altri commit sul ramo "testing" sono spazzatura, quindi non voglio fonderlo con "master". Invece, voglio solo riprodurre gli ultimi 10 commit sul master.Riproduce l'ultimo N git commesso su un ramo diverso

risposta

16
  1. maestro git checkout
  2. git WhatChanged testare
  3. git cherry-pick _________

?

+5

Solo un fyi-cherry-pick eseguirà solo un commit alla volta, quindi dovrai eseguire il test cherry-picket ~ 9 quindi testare ~ 8 quindi ... testare. Ecco perché preferisco l'approccio di rebase suggerito da Talljoe ... ovviamente il risultato è lo stesso. In effetti, se esegui il rebase in modo interattivo, git utilizzerà effettivamente il cherry-pick sotto il cofano. –

+9

@PatNotz 'git cherry-pick' al momento può attualmente eseguire più commit alla volta (ad esempio' git cherry-pick testing ~ 10..testing'). –

+0

Non si dovrebbe mai usare 'cherry-pick'. Leggi [questo articolo] (http://www.draconianoverlord.com/2013/09/07/no-cherry-picking.html) per ulteriori informazioni. – Tim

80

Rebase dovrebbe farlo.

git rebase -p --onto master testing~10 testing 

Questo copierà gli ultimi dieci commit su test a padroneggiare e fare che il nuovo test (il vecchio test sarà orfano). Quindi puoi unire il master al test come avanzamento rapido.

git checkout master 
git merge testing 
+0

Usato la risposta di Ron prima che questo fosse pubblicato. –

+8

Forse vale la pena notare che questo lascia test allo stesso punto del master, lasciando il "garbage" commesso orfano. Questo può o non può essere una buona cosa. Un'altra possibilità potrebbe essere git checkout master; git reset - test difficile; git rebase --onto HEAD @ {1} HEAD ~ 10 –

+0

@CharlesBailey Che git flog hai intenzione di colpire li? – Fredrick

2

Come detto nei commenti, la risposta -inspired rebase è lasciando la 'spazzatura' commit orfani.

Basta usare semplici strumenti:

git checkout master 
git merge testing 
git checkout testing 
git reset --hard HEAD~10 # Go back 10 commits (*1) 
git checkout master 

(* 1) Vi troverete a "perdere" impegna dal ramo testing, in quanto avrete quei impegna a master grazie al merge.

Problemi correlati