Skip to content

Instantly share code, notes, and snippets.

@grimzy
Created September 15, 2017 02:15
Star You must be signed in to star a gist
Save grimzy/a1d3aae40412634df29cf86bb74a6f72 to your computer and use it in GitHub Desktop.
Git pull all remote branches
#!/usr/bin/env bash
git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
git fetch --all
git pull --all
@Wandalen
Copy link

Wandalen commented Jun 1, 2022

Hi,
According to the doc on pull, the --all option only affects the fetch part of the pull command.
So isn't it kind of useless to do a fetch --all before a pull --all ?
Also I have doubts that git pull --all does indeed pull all remote branch and not just the current one.
What do you think ?

Confirmed. That is useless. Any working alternative?

@jcwren
Copy link

jcwren commented Jun 29, 2022

git branch -r | grep -v '->' | tr -d 'origin/' | while read remote; do echo "parsing branch $remote"; git checkout "$remote"; git reset --hard $remote ; git pull; echo "$remote done";done

Your tr command is incorrect, as it deletes characters in the list. You want sed.

$ echo "origin/docubranch" | tr -d 'origin/'
emtesdcubach
$ echo "origin/docubranch" | sed -e 's/^origin\///'
docubranch

@m3asmi
Copy link

m3asmi commented Jul 13, 2022

@jcwren thanks, I fixed it

@CynCity17
Copy link

This was so helpful! Thank you!

@haiderGithubOfficial
Copy link

haiderGithubOfficial commented Nov 23, 2023

great

@hughesjs
Copy link

hughesjs commented Dec 8, 2023

Going to come in with a controversial new option:

git branch --remote | cut -c 10- | xargs -d\\n -n1 git switch -f

Just make sure you've committed or stashed all of your changes. This does assume that your remote is called origin, if it's not, change the number of digits getting slashed by cut.

@andry81
Copy link

andry81 commented Dec 30, 2023

Mine own approach to pull and sync:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment