Set up git to pull and push all branches Set up git to pull and push all branches git git

Set up git to pull and push all branches


The simplest way is to do:

git push --all origin

This will push tags and branches.


With modern git you always fetch all branches (as remote-tracking branches into refs/remotes/origin/* namespace, visible with git branch -r or git remote show origin).

By default (see documentation of push.default config variable) you push matching branches, which means that first you have to do git push origin branch for git to push it always on git push.

If you want to always push all branches, you can set up push refspec. Assuming that the remote is named origin you can either use git config:

$ git config --add remote.origin.push '+refs/heads/*:refs/heads/*'$ git config --add remote.origin.push '+refs/tags/*:refs/tags/*'

or directly edit .git/config file to have something like the following:

[remote "origin"]        url = user@example.com:/srv/git/repo.git        fetch = +refs/heads/*:refs/remotes/origin/*        fetch = +refs/tags/*:refs/tags/*        push  = +refs/heads/*:refs/heads/*        push  = +refs/tags/*:refs/tags/*


Including the + in the push spec is probably a bad idea, as it means that git will happily do a non-fast-forward push even without -f, and if the remote server is set up to accept those, you can lose history.

Try just this:

$ git config --add remote.origin.push 'refs/heads/*:refs/heads/*'$ git config --add remote.origin.push 'refs/tags/*:refs/tags/*'$ git config --add remote.origin.fetch 'refs/heads/*:refs/remotes/origin/*'$ git config --add remote.origin.fetch 'refs/tags/*:refs/tags/*'