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.