commandlinefu tem 2 proposições interessantes:
for k in `git branch | perl -pe s/^..//`; do echo -e `git show --pretty=format:"%Cgreen%ci %Cblue%cr%Creset" $k -- | head -n 1`\\t$k; done | sort -r
ou:
for k in `git branch | sed s/^..//`; do echo -e `git log -1 --pretty=format:"%Cgreen%ci %Cblue%cr%Creset" $k --`\\t"$k";done | sort
Isso é para ramificações locais, em uma sintaxe Unix. Usando git branch -r
, você também pode mostrar ramificações remotas:
for k in `git branch -r | perl -pe 's/^..(.*?)( ->.*)?$/\1/'`; do echo -e `git show --pretty=format:"%Cgreen%ci %Cblue%cr%Creset" $k -- | head -n 1`\\t$k; done | sort -r
Michael Forrest menciona nos comentários que o zsh requer escapes para a sed
expressão:
for k in git branch | perl -pe s\/\^\.\.\/\/; do echo -e git show --pretty=format:"%Cgreen%ci %Cblue%cr%Creset" $k -- | head -n 1\\t$k; done | sort -r
kontinuity acrescenta nos comentários :
Se você quiser adicioná-lo ao seu zshrc, é necessário o seguinte escape.
alias gbage='for k in `git branch -r | perl -pe '\''s/^..(.*?)( ->.*)?$/\1/'\''`; do echo -e `git show --pretty=format:"%Cgreen%ci %Cblue%cr%Creset" $k -- | head -n 1`\\t$k; done | sort -r'
Em várias linhas:
alias gbage='for k in `git branch -r | \
perl -pe '\''s/^..(.*?)( ->.*)?$/\1/'\''`; \
do echo -e `git show --pretty=format:"%Cgreen%ci %Cblue%cr%Creset" $k -- | \
head -n 1`\\t$k; done | sort -r'
Nota: a resposta do n8tr , baseada em, é mais limpa. E mais rápido .
Consulte também " Opção somente nome para ? "git for-each-ref refs/heads
git branch --list
De um modo mais geral, o triplicado nos lembra nos comentários :
- Prefira
$(command substitution)
sintaxe moderna a sintaxe obsoleta de backtick.
(Ilustrei esse ponto em 2014 com " Qual é a diferença entre $(command)
e `command`
na programação de shell? ")
- Não leia linhas com
for
.
- Provavelmente mude para
git for-each-ref refs/remote
para obter nomes de filiais remotas em formato legível por máquina