Come unire un commit specifico da un ramo all'altro in Git?


Risposte:


233

Il git cherry-pick <commit>comando ti consente di eseguire un singolo commit (da qualsiasi ramo) e, essenzialmente, di modificarlo nel tuo ramo di lavoro.

Il capitolo 5 del libro Pro Git lo spiega meglio di me , completo di diagrammi e simili. ( Anche il capitolo su Rebasing è una buona lettura.)

Infine, ci sono alcuni buoni commenti sulla raccolta delle ciliegie contro la fusione e la riformulazione in un'altra domanda SO .


1
Domanda: diciamo commit Aè ramificata fuori di mastere fare un po 'di lavoro su di esso, creando commit bambino Battraverso E. Say Eha solo 1 riga aggiunta da D. Se git cherry-pick Ein master, non si applica tutti i cambiamenti da Atramite Enel masterramo, o lo fa solo applicare la modifica da Da E, vale a dire, ma aggiunge solo che 1 linea per master? Se il caso è il primo, come posso ottenere il secondo? (a parte copiare e incollare manualmente)
Chharvey,

7
git cherry-pick -n <commit> Se non si desidera eseguire il commit automatico di cherry pick.
Ben Flynn,

6

Se BranchA non è stato trasferito su un telecomando, è possibile riordinare i commit utilizzando rebasee quindi semplicemente merge. E 'preferibile utilizzare mergepiù di rebasequando possibile, poiché non crea commit duplicati.

git checkout BranchA
git rebase -i HEAD~113
... reorder the commits so the 10 you want are first ...
git checkout BranchB
git merge [the 10th commit]

2

FONTE: https://git-scm.com/book/en/v2/Distributed-Git-Maintain-a-Project#Integrating-Contributed-Work

L'altro modo per spostare il lavoro introdotto da un ramo all'altro è quello di selezionarlo. Una scelta di ciliegie in Git è come un rebase per un singolo commit. Prende la patch introdotta in un commit e tenta di riapplicarla sul ramo in cui ci si trova attualmente. Questo è utile se hai un certo numero di commit su un ramo di argomento e vuoi integrarne solo uno o se hai un solo commit su un ramo di argomento e preferisci selezionarlo piuttosto che eseguire rebase. Ad esempio, supponiamo di avere un progetto simile al seguente:

inserisci qui la descrizione dell'immagine

Se vuoi inserire commit e43a6 nel tuo ramo master, puoi eseguirlo

$ git cherry-pick e43a6
Finished one cherry-pick.
[master]: created a0a41a9: "More friendly message when locking the index fails."
 3 files changed, 17 insertions(+), 3 deletions(-)

Questo tira la stessa modifica introdotta in e43a6, ma ottieni un nuovo valore di commit SHA-1, perché la data applicata è diversa. Ora la tua storia è simile a questa:

inserisci qui la descrizione dell'immagine

Ora puoi rimuovere il ramo dell'argomento e rilasciare i commit che non volevi inserire.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.