从另一个仓库拉取Git代码

146

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

如果我更改Generic中的核心功能,则希望将我对Generic中核心功能所做的最新更改更新到Acme仓库中。 我该怎么做?

据我所知,我实质上是尝试将上游仓库中所做的更改合并到当前分叉中。

如果有意义的话,我正在尝试这样做是因为我有一个通用的应用程序,然后为个别客户(例如此示例中的Acme)构建和定制品牌。 如果有更简洁的方法,请告诉我。

3个回答

208
在您的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,但那是我脑海中第一个随机字符串)。


8
好的,谢谢。还有一个问题:有没有办法让这个远程仓库只读,这样我就不会意外地往里面推送了? - Libbux
1
我开始回答,但我看到McLovin已经编辑了他的答案以包括那个。 - Frankie Simon
4
自Git 2.9版本起,您需要指定--allow-unrelated-histories标志。请参阅https://dev59.com/ploU5IYBdhLWcg3wAjYs#37938036。 - sfinks_29
9
我需要执行 git pull --allow-unrelated-histories upstream master 命令。 - Alec Jacobson
如果我只想推送到“Acme”,而不是“Generic”,该怎么办? - Alejandro
显示剩余3条评论

43
为了从不同的仓库中拉取特定分支,您可以使用以下git命令。

为了从不同的repo拉取特定分支,您可以使用以下git命令。

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

1
很遗憾无法拉取特定的提交(例如从不同的存储库中挑选一个提交,这可能非常有用,如果您已经使用另一个存储库作为基础,并且想要继续从基础存储库更新)。对此有什么想法吗? - timhc22

7

@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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接