Le risposte principali descrivono come applicare le modifiche da un commit specifico al ramo corrente. Se questo è ciò che intendi per "come unire", usa semplicemente cherry-pick come suggeriscono.
Ma se in realtà vuoi unire , cioè vuoi un nuovo commit con due genitori - il commit esistente sul ramo corrente e il commit da cui vuoi applicare le modifiche - allora una scelta ciliegia non lo realizzerà.
Avere una vera storia di merge può essere desiderabile, ad esempio, se il tuo processo di compilazione sfrutta i vantaggi di git ancestry per impostare automaticamente le stringhe di versione in base all'ultimo tag (usando git describe
).
Invece di cherry-pick, puoi fare un vero git merge --no-commit
e proprio , quindi regolare manualmente l'indice per rimuovere tutte le modifiche che non desideri.
Supponiamo di essere sul ramo A
e di voler unire il commit sulla punta del ramo B
:
git checkout A
git merge --no-commit B
Ora sei pronto per creare un commit con due genitori, il suggerimento attuale è di A
e B
. Tuttavia, è possibile che vengano applicate più modifiche di quanto si desideri, comprese le modifiche da precedenti commit nel ramo B. È necessario annullare queste modifiche indesiderate, quindi eseguire il commit.
(Potrebbe esserci un modo semplice per riportare lo stato della directory di lavoro e l'indice come prima della fusione, in modo da avere una lavagna pulita su cui scegliere il commit desiderato in primo luogo. Ma Non so come raggiungere quella tabula rasa git checkout HEAD
e git reset HEAD
rimuoverò entrambi lo stato di unione, vanificando lo scopo di questo metodo.)
Quindi annulla manualmente le modifiche indesiderate. Ad esempio, potresti
git revert --no-commit 012ea56
per ogni commit indesiderato 012ea56
.
Al termine delle modifiche, crea il tuo commit:
git commit -m "Merge in commit 823749a from B which tweaked the timeout code"
Ora hai solo il cambiamento che volevi e l'albero degli antenati mostra che tecnicamente ti sei unito a B.