Me deparei com essa questão agora e tenho algo a acrescentar
Para ir para o commit mais recente:
git checkout $(git log --branches -1 --pretty=format:"%H")
Explicação:
git log --branches
mostra o log de confirmações de todas as ramificações locais
-1
limite a uma confirmação →
--pretty=format:"%H"
formato de confirmação mais recente para mostrar apenas o
git checkout $(...)
uso de hash de confirmação, saída do subshell como argumento para checkout
Nota:
Isso resultará em uma cabeça desanexada (porque fazemos o checkout diretamente no commit). Isso pode ser evitado extraindo o nome do ramo usando sed
, explicado abaixo.
Para ir para a ramificação do commit mais recente:
git checkout $(git log --branches -1 --pretty=format:'%D' | sed 's/.*, //g')
Explicação:
git log --branches
mostra o log de confirmações de todas as ramificações locais
-1
limite a uma confirmação → o
--pretty=format:"%D"
formato de confirmação mais recente para mostrar apenas os nomes de referência
| sed 's/.*, //g'
ignora todos, exceto o último de várias refs (*)
git checkout $(...)
usa a saída do subshell como argumento para checkout
*) HEAD e ramificações remotas são listadas primeiro, as ramificações locais são listadas por último em ordem alfabética decrescente, portanto, o restante será o primeiro nome de ramificação em ordem alfabética
Nota:
Isso sempre usará apenas o primeiro nome do ramo (em ordem alfabética) se houver vários para esse commit.
Enfim, acho que a melhor solução seria apenas exibir os nomes de referência para o commit mais recente para saber para onde fazer o checkout:
git log --branches -1 --pretty=format:'%D'
Por exemplo, crie o alias git top
para esse comando.
git log
frase da sua pergunta, você sempre pode executargit log --all
(ou mais útilgit log --oneline --graph --all
).