我在github上有一个项目(上游)的分叉(起源)。现在上游项目已经添加了一个新的分支,我想导入到我的分叉。我怎么做呢?

我试着检查远程并在上面创建一个分支,但这配置分支的方式是git push试图推到上游:

git checkout upstream/branch
git checkout -b branch

edit

也许这不是很清楚,但是我想把分支添加到我的本地存储库中,这样我就可以通过git push将它推到原点(我的fork)。因为上游存储库通常是只读的,您可以对其进行分叉。

因此,我基本上想签出一个不存在的分支在原点,其内容将从上游拉入。


——跟踪?

git branch --track branch upstream/branch

我会用

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

确保你已经将新的上游分支拉入本地回购: 首先,确保您的工作树是干净的(提交/保存/恢复任何更改) 然后,git获取上游来检索新的上游分支 创建并切换到新的上游分支(newbranch)的本地版本: Git checkout -b newbranch upstream/newbranch 当你准备好将新分支推到原点时: Git push -u origin newbranch

-u开关设置对指定远程(在本例中为origin)的跟踪。


这个我也遇到了麻烦,谷歌把我带到了这里。然而,这些解决方案并没有奏效。我的问题是,当我添加我的上游,它设置我的git配置只获取主,而不是所有分支。 它看起来是这样的

[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/*

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

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

我有一个稍微复杂一点的场景,我已经在我的fork中定义了一个上游(来自canonical repo),但需要从不同的fork签出一个分支。要做到这一点,过程略有不同。下面是我最终得到的配置:

[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>

这将为您提供一个派生自<other_user> fork的本地分支。

为了推动本地分支,我必须明确我的push命令。

git push origin <branch>

从UI来看:

在你的fork选择分支,点击“New Branch”。在那里,您可以选择源-您的分支或上游。选择upstream并选择您想要“导入”的分支。创建具有相同名称的分支。完成了。