从另一个存储库中提取 Git

我有一个名为 Generic的存储库,它是一个通用应用程序。我将它分叉到一个名为 Acme的存储库中,它只是构建在应用程序存储的 Generic存储库上,并将 Acme Co 品牌添加到其中。

如果我对 Generic中的核心功能进行更改,我希望使用对 Generic中的核心功能进行的最新更改来更新 Acme存储库。我要怎么做?

据我所知,我实际上是试图将在上游存储库中所做的更改合并到当前分支中。

如果这意味着什么的话,我正在尝试这样做,因为我有一个通用的应用程序,然后我为单独的客户机(如本例中的 Acme)构建和命名它。如果有更干净的方法,请告诉我。

96997 次浏览

Acme回购中发出以下命令。它添加了一个名为 upstream的新远程存储库,该存储库指向 Generic回购。

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

然后,您可以使用以下命令将对 Generic所做的任何更改合并到 Acme中的当前分支中:

git pull upstream

如果您只想让它下载更改而不自动合并,请使用 git fetch而不是 git pull

如果希望禁用推送到该存储库,可以使用下面的代码将推送 URL 设置为无效 URL

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

Git 现在会对你大喊大叫,说如果你试图推到 upstream,就无法找到回购(对于 Rickroll,我很抱歉,但它是第一个随机的字符串,突然出现在我的脑海中)。

为了从不同的回购中提取特定的分支,您可以使用下面的 git 命令。

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

正如 @ vin提到的,你可以直接从另一个回购协议中提取,而不需要添加新的来源(假设从另一个回购协议的 master分支提取到本地的 master分支) :

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

如果两个回购协议的提交历史没有联系,那么 --allow-unrelated-histories将是必要的,但使用它与谨慎,因为它意味着你知道你在做什么。

你也可以将一个本地回购协议 push添加到另一个回购协议 没有中作为远程分支(远程分支不一定存在,所以你可以使用任何你想要的东西,例如 master:new_branch) :

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