commandlinefu ha 2 proposizioni interessanti:
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
o:
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
Questo è per le filiali locali, in una sintassi Unix. Usando git branch -r
, puoi anche mostrare rami remoti:
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 menziona nei commenti che zsh richiede escape per l' sed
espressione:
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 aggiunge nei commenti :
Se vuoi aggiungerlo a zshrc è necessaria la seguente via di fuga.
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'
In più righe:
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: la risposta di n8tr , basata su è più pulita. E più veloce .
Vedi anche " Opzione solo nome per ? "git for-each-ref refs/heads
git branch --list
Più in generale, il tripleee ci ricorda nei commenti :
- Preferisce la
$(command substitution)
sintassi moderna rispetto alla sintassi backtick obsoleta.
(Ho illustrato questo punto nel 2014 con " Qual è la differenza tra $(command)
e `command`
nella programmazione della shell? ")
- Non leggere le righe con
for
.
- Probabilmente passa a
git for-each-ref refs/remote
per ottenere i nomi delle filiali remote in formato leggibile da una macchina