Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
How to push to multiple git remotes at once. Useful if you keep mirrors of your repo.

Pushing to Multiple Git Repos

If a project has to have multiple git repos (e.g. Bitbucket and Github) then it's better that they remain in sync.

Usually this would involve pushing each branch to each repo in turn, but actually Git allows pushing to multiple repos in one go.

If in doubt about what git is doing when you run these commands, just edit .git/config (git-config(1)) and see what it's put there.

Remotes

Suppose your git remotes are set up like this:

git remote add github git@github.com:muccg/my-project.git
git remote add bb git@bitbucket.org:ccgmurdoch/my-project.git

The origin remote probably points to one of these URLs.

Remote Push URLs

To set up the push URLs do this:

git remote set-url --add --push origin git@github.com:muccg/my-project.git
git remote set-url --add --push origin git@bitbucket.org:ccgmurdoch/my-project.git

It will change the remote.origin.pushurl config entry. Now pushes will send to both of these destinations, rather than the fetch URL.

Check it out by running:

git remote show origin

Per-branch

A branch can push and pull from separate remotes. This might be useful in rare circumstances such as maintaining a fork with customizations to the upstream repo. If your branch follows github by default:

git branch --set-upstream-to=github next_release

(That command changed branch.next_release.remote.)

Then git allows branches to have multiple branch.<name>.pushRemote entries. You must edit the .git/config file to set them.

Pull Multiple

You can't pull from multiple remotes at once, but you can fetch from all of them:

git fetch --all

Note that fetching won't update your current branch (that's why git-pull exists), so you have to merge -- fast-forward or otherwise.

For example, this will octopus merge the branches if the remotes got out of sync:

git merge github/next_release bb/next_release

References

@AlexBezuska

This comment has been minimized.

Copy link

AlexBezuska commented Jun 7, 2019

Thank you, this works great!

@LinuxSuRen

This comment has been minimized.

Copy link

LinuxSuRen commented Aug 7, 2019

Thanks very much.

@sairam-github

This comment has been minimized.

Copy link

sairam-github commented Aug 14, 2019

This is so cool.

@samirillion

This comment has been minimized.

Copy link

samirillion commented Aug 29, 2019

noice

@fredericpfisterer

This comment has been minimized.

Copy link

fredericpfisterer commented Sep 3, 2019

Very cool !

@primelos

This comment has been minimized.

Copy link

primelos commented Dec 9, 2019

Boom! thank you!

@renepardon

This comment has been minimized.

Copy link

renepardon commented Dec 10, 2019

git remote set-url --add --push origin <...>

It's that simple 👍

@Skura23

This comment has been minimized.

Copy link

Skura23 commented Jan 14, 2020

Thanks, very helpful.

@mubaraqwahab

This comment has been minimized.

Copy link

mubaraqwahab commented May 11, 2020

Thank you very much!

@Codesait

This comment has been minimized.

Copy link

Codesait commented May 26, 2020

very nice

@MustafaAnasKH99

This comment has been minimized.

Copy link

MustafaAnasKH99 commented Jun 7, 2020

Ops. I just realized that I have the gitlab access token stored locally but github requires a password. So now when I push, it only pushes to gitlab. What should I do in this case?

@GretaP

This comment has been minimized.

Copy link

GretaP commented Jul 1, 2020

Thanks for this - I could have figure this out on my own but this made everything SO SIMPLE. Really great job reviewing everything

@blackinitial

This comment has been minimized.

Copy link

blackinitial commented Jul 2, 2020

thanks a lots

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.