2010-02-16 11 views
9

Ho questo (git repo):(git): come portare un commit specifico dal ramo upstream?

A--B--C--D ->master 
    \--E ->dev 

E voglio solo portare impegnarsi D di espandersi dev (D non dipende C), in modo tale che:

A--B--C--D ->master 
    \--E--D' ->dev 

Ma D 'non dovrebbe essere aggiunto al master dopo un'unione:

A--B--C--D--E' ->master 
    \--E--D'/ ->dev 

Questo perché voglio portare Si aggiorna il file senza dover inquinare lo dev con i nuovi file che C (che rappresenta un altro, grande merge) aggiunge.
Suppongo di dover usare git rebase, ma non riesco a indovinare come.

risposta

10

Si desidera utilizzare git cherry-pick lavorare. Immagino che il tuo telecomando sia chiamato "origine" (ma sostituisca il vero nome del repository remoto per "origine"). Immagino che tu abbia due filiali locali chiamate anche master e dev. Suppongo che il commit D sia origin/dev. È possibile cherry-pick D con il seguente:

$ git fetch origin    # Assuming the upstream remote's name is "origin" 
$ git checkout dev    # Check out your local "dev" branch 
$ git cherry-pick $COMMIT_D # Replace "COMMIT_D" with the hash for commit D 

Ora dovrete solo le modifiche da commettere D in dev.