Libbux
Libbux

Reputation: 1801

Git pull from another repository

I have a repository called Generic, which is a generic application. I have forked it into a repository called Acme, which just builds upon the application stored Generic repository and adds Acme Co branding to it.

If I make changes to the core functionality in Generic, I want to update the Acme repository with the latest changes I have made to the core functionality in Generic. How would I do that?

As far as I can tell, I am essentially trying to merge the changes made in an upstream repository into the current fork.

If it means anything, I'm trying to do this because I have a generic application that I then build upon and brand for individual clients (like Acme in this example). If there is a cleaner way of doing this, let me know.

Upvotes: 154

Views: 140291

Answers (3)

ccpizza
ccpizza

Reputation: 31801

As @vin mentioned you can git pull directly from another repo without adding a new origin (assuming a pull from another repo's master branch to the local master branch):

git pull https://some-other-repo.git master:master

# OR pull to a new local branch
git pull https://some-other-repo.git master:new_local_branch

If the commit histories of the two repos are not linked then --allow-unrelated-histories will be needed but use it with caution, as it implies you know what you are doing.

You can also git push a local repo to another repo without adding it as a remote:

git push https://some-other-repo.git master:master

# OR create a new branch on remote
git push https://some-other-repo.git master:new_remote_branch

Upvotes: 8

vin
vin

Reputation: 671

In order to pull a particular branch from different repo you can use the below git command.

git pull <git_url> <branch> --allow-unrelated-histories

Upvotes: 46

McLovin
McLovin

Reputation: 3674

Issue the following command in your Acme repo. It adds a new remote repository named upstream that points to the Generic repo.

git remote add upstream https://location/of/generic.git

You can then merge any changes made to Generic into the current branch in Acme with the following command:

git pull upstream

If you just want it to download the changes without automatically merging, use git fetch instead of git pull.

If you want to disable pushing to that repository, set the push URL to an invalid URL using something like

git config remote.upstream.pushurl "NEVER GONNA GIVE YOU UP"

Git will now yell at you about not being able to find a repo if you try to push to upstream (and sorry about the Rickroll, but it was the first random string that popped into my head).

Upvotes: 218

Related Questions