Come vedere quali commit in un ramo non sono nell’altro?

Ho due rami di devel e il next . In Devel ho una quantità più o meno enorme di commit. Alcuni dei commit sono raccolti in next . Inoltre ho aggiunto alcuni commit a next che sono uniti a devel .

Ora vorrei vedere cosa manca in next , così posso testare i cambiamenti in dettaglio prima di portarli a quello next . La mia domanda è ora, come posso vedere quali commit sono in devel ma non in next?

Il comando poco usato ti mostra i commit che non sono ancora stati selezionati. La documentazione per git cherry è qui , ma, in breve, dovresti solo essere in grado di fare:

 git checkout devel git cherry next 

… e vedi l’output un po ‘come questo:

 + 492508acab7b454eee8b805f8ba906056eede0ff - 5ceb5a9077ddb9e78b1e8f24bfc70e674c627949 + b4459544c000f4d51d1ec23f279d9cdb19c1d32b + b6ce3b78e938644a293b2dd2a15b2fecb1b54cd9 

I commit che iniziano con + saranno quelli che non hai ancora selezionato in next . In questo caso, ho scelto solo un commit fino ad ora. È ansible che si desideri aggiungere il parametro -v al comando git cherry , in modo che emetta anche la riga dell’object di ciascun commit.

Inoltre, puoi usare

 git log --left-right --graph --cherry-pick --oneline devel...next 

per ottenere una bella lista di diversi commit effettivi non condivisi tra i rami.

La parola --cherry-pick è --cherry-pick

--cherry-pick

Ometti qualsiasi commit che introduce la stessa modifica di un altro commit sull’altro lato quando il set di commit è limitato con la differenza simmetrica. Ad esempio, se hai due rami, A e B, un modo usuale per elencare tutti i commit su un solo lato di essi è con –left-right, come nell’esempio sopra nella descrizione di tale opzione. Mostra comunque i commit che sono stati selezionati con la ciliegia dall’altro ramo (ad esempio, “3a b” può essere selezionato dal ramo A). Con questa opzione, tali coppie di commit sono escluse dall’output.

Aggiornamento Come menzionato in un commento, sono state aggiunte versioni recenti di git --cherry-mark :

--cherry-mark

Come –cherry-pick (vedi sotto) ma contrassegna l’equivalente con commit = piuttosto che omettendoli, e quelli non equivalenti con +.

Potresti provare a creare sottoinsiemi di log git:

 git log --oneline devel ^next 

Che ne dite di

 git log next..devel 

Il risultato è simile alla risposta di Byran (diverso ordine di commit), ma entrambe le nostre risposte produrranno commit diversi tra i rami, piuttosto che mostrare ciò che è in un ramo e non nell’altro.

Per ottenere l’elenco di commit che non sono stati integrati nel ramo di rilascio (successivo) è ansible utilizzare:

 git rev-list --reverse --pretty="TO_TEST %h (<%ae>) %s" --cherry-pick --right-only origin/release_branch...origin/development_branch | grep "^TO_TEST " > NotIntegratedYet.txt 

Controlla git-rev-list per maggiori informazioni.