Ho affrontato questa domanda proprio ora e ho qualcosa da aggiungere
Per andare al commit più recente:
git checkout $(git log --branches -1 --pretty=format:"%H")
Spiegazione:
git log --branches
mostra il registro dei commit da tutte le filiali locali
-1
a un solo commit → il
--pretty=format:"%H"
formato di commit più recente per mostrare solo l'hash di commit
git checkout $(...)
usa l'output di subshell come argomento per il checkout
Nota:
Ciò comporterà comunque una testa staccata (perché effettuiamo il checkout direttamente al commit). Questo può essere evitato estraendo il nome del ramo usando sed
, spiegato di seguito.
Per andare al ramo del commit più recente:
git checkout $(git log --branches -1 --pretty=format:'%D' | sed 's/.*, //g')
Spiegazione:
git log --branches
mostra il registro dei commit da tutte le filiali locali
-1
a un solo commit → il
--pretty=format:"%D"
formato di commit più recente per mostrare solo i nomi di riferimento
| sed 's/.*, //g'
ignora tutto tranne l'ultimo di più riferimenti (*)
git checkout $(...)
usa l'output di subshell come argomento per il checkout
*) HEAD e i rami remoti sono elencati per primi, i rami locali sono elencati per ultimi in ordine alfabetico decrescente, quindi quello rimanente sarà il nome del primo ramo in ordine alfabetico
Nota:
Questo userà sempre il nome della filiale (in ordine alfabetico) solo se ce ne sono più per quel commit.
Ad ogni modo, penso che la soluzione migliore sarebbe quella di visualizzare i nomi di riferimento per il commit più recente per sapere dove effettuare il checkout per:
git log --branches -1 --pretty=format:'%D'
Ad esempio, creare l'alias git top
per quel comando.
git log
frase della tua domanda, puoi sempre correregit log --all
(o più utilmentegit log --oneline --graph --all
).