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 --branchesmostra o log de confirmações de todas as ramificações locais
-1limite 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 --branchesmostra o log de confirmações de todas as ramificações locais
-1limite 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 toppara esse comando.
git logfrase da sua pergunta, você sempre pode executargit log --all(ou mais útilgit log --oneline --graph --all).