Github:将上游分支导入fork


169

我在github上有一个origin来自项目(upstream)的fork()。现在上游项目添加了一个新分支,我想导入到我的fork中。我怎么做?

我尝试签出遥控器并在其上创建一个分支,但这以git push尝试推送到的方式配置了该分支upstream

git checkout upstream/branch
git checkout -b branch

编辑

也许还不清楚,但是我想将分支添加到本地存储库中,因此可以通过将其推送到origin(我的fork)git push。因为上游存储库通常是只读的,所以您可以将其分叉以进行贡献。

因此,我基本上想签出一个不存在的分支,origin其内容将从中被拉入upstream

Answers:


262
  1. 确保已将新的上游分支拉入本地仓库

    • 首先,确保您的工作树是干净的(提交/存储/还原所有更改)
    • 然后,git fetch upstream检索新的上游分支
  2. 创建并切换到新上游分支newbranch)的本地版本

    • git checkout -b newbranch upstream/newbranch
  3. 当您准备将新分支推到原点时

    • git push -u origin newbranch

-u开关组向上跟踪到指定的远程(在本例中,origin


6
我认为git fetch upstream第一步是一个更好的选择,因为git pull upstream需要在之后git remote add ...执行更多操作upstream
亚历山大·帕夫洛夫

git pull上游返回:You asked to pull from the remote 'upstream', but did not specify a branch. Because this is not the default configured remote for your current branch, you must specify a branch on the command line.在命令末尾添加分支名称会导致上游分支与当前本地分支合并,而不是允许创建新的本地分支。有任何想法吗?
mMontu 2013年

1
替换git pull upstreamgit fetch upstream解决了该问题,并且以下步骤有效。
mMontu 2013年

我得到:致命的:无法更新路径并同时切换到分支“上游”。您是否打算检出无法解决为提交的“上游/母版”?
sureshvv

1
@sureshvv这可能是因为在执行任何上述操作之前,您需要远程引用名为上游的上游存储库。如果您不这样做,可以这样添加:git remote添加上游your_git_upstream_repository_url.git。如果您需要对此事进行澄清,请阅读此内容。
加布里埃尔·雷尼亚

7

我会用

git checkout -b <new_branch> upstream/<new_branch>

实际上,这甚至是我在问题中已经解释的内容之前就尝试过的方法。它导致相同的结果。

4

我也遇到了麻烦,谷歌把我带到了这里。但是,解决方案不起作用。我的问题是,当我添加上游时,它将git config设置为仅获取master而不是所有分支。看起来像这样

[remote "somebody"]
        url = git@github.com:somebodys/repo.git
        fetch = +refs/heads/master:refs/remotes/upstream/master

如下编辑.git / config解决了我的问题

[remote "somebody"]
        url = git@github.com:somebodys/repo.git
        fetch = +refs/heads/*:refs/remotes/upstream/*

1

以下步骤对我来说效果很好(假设上游分支名称为branch):

$ git fetch upstream
$ git checkout branch
$ git push origin

1
我收到git fetch上游致命的提示:“上游”似乎不是git存储库致命的:无法从远程存储库读取。请确保您具有正确的访问权限,并且存储库存在。
ThinkDigital

0

--track

git branch --track branch upstream/branch

也许我理解你错了,但是这样做会以相同的方式建立分支;与... push相处upstream

不,我想我误会了你。
troelskn 2010年

0

我有一个稍微复杂的场景,upstream在我的派生中已经有一个定义(来自规范的仓库),但是需要从另一个派生中检出一个分支。为完成此任务,过程略有不同。这是我最终得到的配置:

[remote "origin"]
url = git@github.com:<your_user/org>/<repo>.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
rebase = true
[remote "upstream"]
url = git@github.com:<upstream_user>/<repo>.git
fetch = +refs/heads/*:refs/remotes/upstream/*
[remote "other_user"]
url = git@github.com:<other_user>/<repo>.git
fetch = +refs/heads/*:refs/remotes/<other_user>/*

现在,您也可以从<other_user>fork中检出分支。

git fetch <other_user> <branch>
git checkout -b <branch> <other_user>/<branch>

这将为您提供派生自派生的本地分支。

要推送该本地分支,我必须具体说明我的push命令。

git push origin <branch>

这与接受的答案几乎相同,只是您要从中获取的遥控器不称为“上游”。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.