我有一个名为
Generic
的存储库,它是一个通用应用程序。我已将其分叉到一个名为 Acme
的存储库中,该存储库仅基于存储的应用程序 Generic
存储库构建,并向其中添加了 Acme Co 品牌。
如果我对
Generic
中的核心功能进行更改,我想使用我对 Acme
中的核心功能所做的最新更改来更新 Generic
存储库。我该怎么做?
据我所知,我本质上是在尝试将上游存储库中所做的更改合并到当前的分支中。
如果这意味着什么的话,我正在尝试这样做,因为我有一个通用应用程序,然后我可以在该应用程序的基础上为个人客户构建和品牌化(就像本例中的
Acme
)。如果有更干净的方法,请告诉我。
在您的
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"
如果你尝试推送到
upstream
,Git 现在会向你大喊找不到存储库(对 Rickroll 感到抱歉,但这是我脑海中弹出的第一个随机字符串)。
为了从不同的存储库中提取特定分支,您可以使用以下 git 命令。
git pull <git_url> <branch> --allow-unrelated-histories
正如 @vin 提到的,您可以直接从另一个存储库
git pull
而无需添加新的源(假设从另一个存储库的 master
分支拉到本地 master
分支):
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
如果两个存储库的提交历史未链接,则需要
--allow-unrelated-histories
,但请谨慎使用它,因为这意味着您知道自己在做什么。
您还可以
git push
将本地存储库转移到另一个存储库而无需将其添加为远程存储库:
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