-
-
Save leoapost/4318441 to your computer and use it in GitHub Desktop.
# Replace REMOTE_NAME with your remote name (e.g. origin) | |
git branch -r | grep REMOTE_NAME/ | grep -v 'master$' | grep -v HEAD| cut -d/ -f2 | while read line; do git push REMOTE_NAME :$line; done; |
Just use -f2- instead of just -f2 to fix the branches with / in them.
Hmm... but git push accepts many branches at the same time (e.g. git push origin :devel :experimental :blah
), so you can simply do:
REMOTE="origin"
git branch -r | grep "^ ${REMOTE}/" | sed "s|^ ${REMOTE}/|:|" | grep -v "^:HEAD" | grep -v "^:master$" | xargs git push ${REMOTE}
Perfect idea. Save a lot of work.
And to be cautious, perhaps do git branch -r | grep REMOTE_NAME/ | grep -v 'master$' | grep -v HEAD| cut -d/ -f2 | while read line; do echo $line; done;
before delete.
Might want to try git branch -r | grep origin/ | grep -v 'master$' | grep -v HEAD | cut -d/ -f2 | parallel git push origin --delete
, which is faster. Refer https://www.gnu.org/software/parallel/.
@leoapost This command does not work for branches with /
in its name. To fix this, you need to replace cut -d/ -f2
with cut -d/ -f2-
git branch -r | grep REMOTE_NAME/ | grep -v 'master$' | grep -v HEAD| cut -d/ -f2- | while read line; do git push REMOTE_NAME :$line; done;
Works gr8, thanks 4 sharing.
Sweeeeet, thanks for sharing!
This is great! Thank you for sharing!
Thanks for sharing
Thanks to the OP and others who added additional info. Very helpful!
thanks
in MacOS, use
sed -E "s/^[[:space:]]*REMOTE_NAME\///g"
, also git push command could begit push REMOTE_NAME :heads/$line
in case of tags with same name.For copy-pasters: