Push local Git repo to new remote including all branches and tags
I have a local Git repo that I would like to push to a new remote repo (brand new repo set up on Beanstalk, if that matters). My local repo has a few branches and tags and I would like to keep all of my history. It looks like I basically just need to do a git push, but that only uploads the master branch. How do I push everything so I get a full replica of my local repo on the remote?
To push all your branches, use either (replace REMOTE with the name of the remote, for example "origin"):
git push REMOTE '*:*'
git push REMOTE --all
To push all your tags:
git push REMOTE --tags
Finally, I think you can do this all in one command with:
git push REMOTE --mirror
However, in addition --mirror
, will also push your remotes, so this might not be exactly what you want.
In the case like me that you aquired a repo and are now switching the remote origin to a different repo, a new empty one...
So you have your repo and all the branches inside, but you still need to checkout those branches for the git push --all
command to actually push those too.
You should do this before you push:
for remote in `git branch -r | grep -v master `; do git checkout --track $remote ; done
Followed by
git push --all
Here is another take on the same thing which worked better for the situation I was in. It solves the problem where you have more than one remote, would like to clone all branches in remote source
to remote destination
but without having to check them all out beforehand.
(The problem I had with Daniel's solution was that it would refuse to checkout a tracking branch from the source
remote if I had previously checked it out already, ie, it would not update my local branch before the push)
git push destination +refs/remotes/source/*:refs/heads/*
Note: If you are not using direct CLI, you must escape the asterisks:
git push destination +refs/remotes/source/*:refs/heads/*
this will push all branches in remote source
to a head branch in destination
, possibly doing a non-fast-forward push. You still have to push tags separately.