【问题标题】:Github: Import upstream branch into forkGithub:将上游分支导入 fork
【发布时间】:2011-05-23 13:04:32
【问题描述】:

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

我尝试检查远程并在其之上创建一个分支,但这会以 git push 尝试推送到 upstream 的方式配置分支:

git checkout upstream/branch
git checkout -b branch

编辑

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

所以我基本上想签出origin 上不存在的分支,其内容将从upstream 拉入。

【问题讨论】:

标签: git github


【解决方案1】:

--track?

git branch --track branch upstream/branch

【讨论】:

  • 也许我理解错了,但这样做会以同样的方式设置分支; pushupstream.
  • 不,我想我误会了你。
【解决方案2】:

我会用

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

【讨论】:

  • 这实际上是我在问题中解释之前就尝试过的;它导致相同的结果。
【解决方案3】:
  1. 确保您已将新的 upstream 分支拉入您的 本地 repo

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

    • git checkout -b newbranch upstream/newbranch
  3. 当你准备好将新分支推送到origin时:

    • git push -u origin newbranch

-u 开关设置对指定遥控器的跟踪(在本例中为 origin

【讨论】:

  • 我相信git fetch upstream 是第一步更好的选择,因为git pull upstream 需要在git remote add ... 之后为upstream 执行更多操作。
  • git pull upstream 返回: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. 在命令末尾添加分支名称会导致上游分支与当前本地分支合并,而不是允许创建新的本地分支.有什么想法吗?
  • git pull upstream 替换为git fetch upstream 解决了问题,并且以下步骤有效。
  • 我得到:致命:无法更新路径并同时切换到分支“上游”。您是否打算签出无法解析为提交的“上游/主”?
  • @sureshvv 这可能是因为在执行任何操作之前,您需要远程引用名为 upstream 的上游存储库。如果你不这样做,这就是你添加的方式:git remote add upstream your_git_upstream_repository_url.gitRead this 如果您需要澄清此事。
【解决方案4】:

我也遇到了麻烦,谷歌把我带到了这里。然而,解决方案没有奏效。我的问题是,当我添加上游时,它将我的 git 配置设置为仅获取 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/*

【讨论】:

    【解决方案5】:

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

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

    【讨论】:

    • 我得到 git fetch upstream fatal: 'upstream' 似乎不是 git 存储库致命:无法从远程存储库读取。请确保您拥有正确的访问权限并且存储库存在。
    • @ThinkDigital 我遇到了同样的错误,所以 git fetch 可以正常工作!另外,+1 括号中的评论!
    【解决方案6】:

    我有一个稍微复杂的场景,我已经在我的 fork 中定义了一个 upstream(来自规范的 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>/*
    

    现在您也可以从&lt;other_user&gt; fork 签出一个分支。

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

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

    要推送该本地分支,我必须使用推送命令来具体说明。

    git push origin <branch>
    

    【讨论】:

    • 这与接受的答案几乎相同,只是您从中获取的遥控器不称为“上游”。
    猜你喜欢
    • 1970-01-01
    • 2019-03-29
    • 2020-09-16
    • 1970-01-01
    • 1970-01-01
    • 2012-02-27
    • 2015-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多