Come far impegnare i genitori di una fusione in git?


140

Alcuni comandi git prendono il genitore come una revisione; altri (come git revert), come numero principale. Come ottenere i genitori per entrambi i casi. Non voglio usare il comando log grafico in quanto ciò spesso richiede di scorrere un lungo albero per trovare il secondo genitore.

Risposte:


179

Semplice git log <hash>chiamato per un commit di unione mostra hash abbreviati dei suoi genitori:

 $ git log -1 395f65d
 commit 395f65d438b13fb1fded88a330dc06c3b0951046
 Merge: 9901923 d28790d
 ...

git genera i genitori in base al loro numero: il primo hash (più a sinistra) è per il primo genitore, e così via.

Se tutto ciò che vuoi sono solo gli hash, le due scelte equivalenti sono:

$ git log --pretty=%P -n 1 <commit>
$ git show -s --pretty=%P <commit>

git rev-list può anche mostrare gli hash dei genitori, anche se per prima cosa elencherà l'hash per un commit:

$ git rev-list --parents -n 1 <commit>

Se si desidera esaminare i genitori, è possibile fare riferimento a loro direttamente con carati come <commit>^1e <commit>^2, ad esempio:

git show <commit>^1

Questo generalizza; per una fusione di polpo puoi fare riferimento all'ennesimo genitore come <commit>^n. Puoi fare riferimento a tutti i genitori con <commit>^@, anche se questo non funziona quando è richiesto un singolo commit. I suffissi aggiuntivi possono apparire dopo l' ennesima sintassi del genitore (ad es <commit>^2^. <commit>^2^@), Mentre non possono dopo ^@( <commit>^@^non validi). Per ulteriori informazioni su questa sintassi, leggi la rev-parsepagina man.


1
Rispondere alla mia domanda: i risultati di 'git rev-list --parents -n 1 <somehash>' sono: <somehash> <parent1> <parent2>. Cioè, i genitori sono numerati.
mikemaccana,

Puoi anche usare git-genitori github.com/danielribeiro/dotfiles/blob/master/bin/git-parents . Inseriscilo nel PERCORSO e chiama $ git genitori <commit> (<commit> per impostazione predefinita HEAD)
Daniel Ribeiro

@jefromi, voglio davvero che la parte "Nota anche che il normale output del registro mostra ..." sia in cima alla tua risposta. :)
Adam Monsen,

3
git loge git showproduce cose molto diverse quando c'è un solo genitore. Preferisci git logse vuoi coerenza.
Noel Yap,

Questa risposta non funziona con la mia macchina Ubuntu con git (v2.17.1). Non vedo il Mergefile in git log -1uscita.
mja

29

Quello che segue è il modo più semplice che ho trovato per visualizzare i genitori di una fusione

git show --pretty=raw 3706454

14
git cat-file -p 3706454 è lo stesso ma anche più breve :)
sabgenton,

1
Entrambi sono molto utili!
tecknut,

Un'altra opzionegit log --pretty=raw -1 3706454
selalerer
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.