2009-10-06 19 views
5

Scenario di utilizzo tipico:Confermare una modifica a più di un ramo in Git

Ho master, branch_foo e branch_bar. Tutti sono aggiornati. Ora faccio un "git checkout master" e lavoro su una correzione di bug.

Diciamo che la correzione era su un file tracciato che si trova nello stesso stato su tutti i rami - es. prima della correzione, una differenza del file da ciascun ramo non comporta differenze.

C'è un modo per eseguire questa correzione su tutte le filiali?

risposta

5

Mi aspetto che git cherry-pick sia quello che desideri.

Dopo aver eseguito la correzione sul primo ramo, è possibile utilizzare git cherry-pick per unirlo in ciascuno degli altri rami.

Questa domanda relativa su SO possono essere di interesse: Git & Working on multiple branches

+0

Sì ho pensato di git cherry-pick. Mi chiedevo solo se ci fosse un modo più veloce. – Carl

+0

Grazie :) La domanda correlata era esattamente ciò di cui avevo bisogno. – Carl

9

L'approccio comune a questo è "la fusione verso l'alto". Da man gitworkflows:

commettere sempre le correzioni per il più antico ramo sostenuto che li richiedono. Quindi (periodicamente) unire i rami di integrazione verso l'alto l'uno nell'altro.

Questo dà un flusso molto controllato di correzioni. Se noti che hai applicato una correzione ad es. master che è richiesto anche in maint, dovrai selezionarlo con la ciliegia (usando git-cherry-pick (1)) verso il basso. Questo accadrà un paio di volte e non c'è nulla di cui preoccuparsi se non lo fai molto spesso.

Il primo metodo è ovviamente preferito: è bello avere un commit nel repository solo una volta e poter vedere la cronologia di come è entrato in ogni ramo. La vita non è perfetta, però, e ti troverai a volte nella seconda categoria. Se questa situazione diventa abbastanza comune, si potrebbe forse scrivere uno script come

multi-cherry-pick <commit> <branch> [<branch>...] 

che estrae ogni ramo, a sua volta e ciliegia-sceglie il dato commit.

5

Sì, c'è. Rendi questo commit sul ramo separato argomento (funzionalità) (diramando il ramo più vecchio/stato meno recente), quindi unisci questo ramo argomento in qualsiasi ramo desiderato.

Questo flusso di lavoro è descritto ad esempio nel post del blog Never merging back di Junio ​​C Hamano (manutentore di Git).

Questo è grosso modo quello che ha scritto Jefromi wrote

+0

Grazie. Sì, ho finito per usare i rami degli argomenti. La risposta accettata alla domanda che Tim mi ha indirizzato è stata anche scritta da te ed era esattamente ciò di cui avevo bisogno :) – Carl

Problemi correlati