Unisci a un commit specifico


374

Ho creato un nuovo ramo chiamato newbranchdal masterramo in git. Ora ho fatto un po 'di lavoro e voglio unirmi newbrancha master; tuttavia, ho apportato alcune modifiche aggiuntive newbranche desidero unirmi newbranchfino al quarto dall'ultimo commit a master.

Ho usato cherry-pickma mostra il messaggio per utilizzare le giuste opzioni:

git checkout master    
git cherry-pick ^^^^HEAD newbranch

Posso usare git mergeper farlo invece?

git merge newbranch <commitid>

Risposte:


594

Certo, essendo nel masterramo tutto ciò che devi fare è:

git merge <commit-id>

dov'è l' commit-idhash dell'ultimo commit da newbranchquello che vuoi ottenere nel tuo masterramo.

Puoi scoprire di più su qualsiasi comando git facendo git help <command>. In quel caso lo è git help merge. E i documenti stanno dicendo che l'ultimo argomento per il mergecomando è <commit>..., quindi puoi passare il riferimento a qualsiasi commit o anche a più commit. Tuttavia, non ho mai fatto quest'ultimo da solo.


30
non solo un singolo commit ma tutti i commit precedenti acommit-id
Dau,

53
Sì, sarà unire tutti i commit dal newbranchfin dai tempi della sua storia discostato da masterfino a commit-idin masterramo. Puoi pensare git merge <commit-id>a unire un ramo senza nome che termina con commit-idil ramo corrente.
KL-7,

2
Posso unire tra due filiali locali diverse da master, usando l'ID commit?
skt

1
@skt, puoi solo essere sul ramo locale in cui desideri unirti prima di utilizzare git merge. vale a dire che si desidera unire commit 18a6fac dal ramo b2 al ramo b1, fare semplicementegit checkout b1; git merge 18a6fac
XioRcaL

1
Questo NON sembra funzionare, se mi trovo su un ramo in cui voglio unirmi e c'è qualche altro ramo con commit AB e C, e unisco in C ottiene solo le modifiche apportate in C, non A e B.
ggb667,

12

Per mantenere pulita la ramificazione, puoi fare questo:

git checkout newbranch
git branch newbranch2
git reset --hard <commit Id> # the commit at which you want to merge
git checkout master
git merge newbranch
git checkout newbranch2

In questo modo, newbranch finirà dove è stato unito in master e continuerai a lavorare su newbranch2.


1

Esegui sotto il comando nella cartella del ramo corrente per unire da questo <commit-id>al ramo corrente, --no-commitnon effettuare automaticamente un nuovo commit

git merge --no-commit <commit-id>

git merge --continue può essere eseguito solo dopo che l'unione ha provocato conflitti.

git merge --abort Annullare l'attuale processo di risoluzione dei conflitti e provare a ricostruire lo stato di pre-unione.

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.