5 ms·
Not so fancy, but a one-liner # Remove all local branches for which there is no remote git branch -r | awk '{print $1}' | egrep -v -f /dev/fd/0 <(git branc
by vikin9 6y ago
Not so fancy, but a one-liner
# Remove all local branches for which there is no remote
git branch -r | awk '{print $1}' | egrep -v -f /dev/fd/0 <(git branch -vv | grep origin) | awk '{print $1}' | xargs git branch -D
- lixtra 6y ago> # Remove all local branches for which there is no remote The merged branches part is missing.
- toastal 6y agoThe <() is a Bashism isn't it?
- gravitas 6y ago< is a redirect operator, the out of the item on the right is redirected to the in of the item on the left; () are just grouping operators like math to ensure that bit is self contained inline for the parser.
- inyourtenement 6y agoThat might be a way to remember what it does, but I don't think that's how it works. Try doing `echo <(ls)` to see how it differs. Or, from the manpage: > Process substitution is supported on systems that support named pipes (FIFOs) or the /dev/fd method of naming open files. It takes the form of <(list) or >(list). The process list is run with its input or output connected to a FIFO or some file in /dev/fd. The name of this file is passed as an argument to the current command as the result of the expansion. If the >(list) form is used, writing to the file will provide input for list. If the <(list) form is used, the file passed as an argument should be read to obtain the output of list.
- spyc 6y agoYes. See "Process Substitution" in "man bash". It works great, e.g. with diff (or meld): # diff -u <(echo $'one\ntwo') <(echo one) --- /dev/fd/63 2020-08-13 16:14:44.449379498 +0200 +++ /dev/fd/62 2020-08-13 16:14:44.450379506 +0200 @@ -1,2 +1 @@ one -two
- toastal 6y agoGotcha. I wanted to know if it was POSIX compliant (it wasn't clear to me last time I looked it up).
- spyc 6y agoCareful with "git branch -D" — it's a sharp knife.