如何将所有新的上游分支与我的分支同步?

12

前一段时间我fork了一个git仓库。此后,主分支(master branch)出现了几个新的提交(commits)。https://help.github.com/articles/syncing-a-fork/解释了如何将上游(upstream)主分支(master branch)与本地主分支(master branch)同步,然后将这些提交(commits)推送到我的fork中。

然而,它没有提及如何同步新的上游分支(upstream branches)。当我在github上最初fork该项目时,它似乎把所有当时的分支都带了过来。

我已经看到有关如何逐个同步分支的说明。有没有办法一次同步所有旧的和新的分支?

我没有对我的fork进行任何提交。因此,我正在寻找快进(Fast Forward)同步。

编辑: 另一种表达方式:

我想要

git ls-remote origin

相符

git ls-remote upstream

这将包括分支和标签。


你想要实现什么目标?在使用git时,你可以拥有多个远程仓库,不确定是否需要将每个分支都放在你的fork仓库和原始仓库中。 - Devon
上游仓库的存档,包括所有分支。 - Gabriel
2个回答

11

然而它并没有提到如何同步新的上游分支

你需要做的是:

git fetch upstream

假设您有一个名为upstream的远程代码库。
如果没有:

git remote add upstream <upstream_url>

这将获取或更新所有上游分支并存储在本地仓库中,使用upstream命名空间。

您可以使用以下命令查看这些分支:

git branch -avv

如果不能将所有上游分支推送到origin,则需要基于要推送到origin的任何上游分支创建本地分支:

因此,您需要基于要推送到origin的任何上游分支创建本地分支:

git branch abranch upstream/abranch
gut push -u origin abranch 

参见 "git - 从现有远程分支创建本地分支"。

如果要对所有分支执行此操作,请参见 "通过它的镜像裸远程仓库拉取所有分支"。 或者更好的方法是:"将所有远程 git 分支作为本地分支跟踪"。 只需使用 "upstream" 替换 origin 即可。


这将获取“upstream” refspecs,但它不允许我将所有上游分支推送到“origin”。 - Gabriel
有没有一种方法可以一次性为所有上游分支执行此操作,而不是逐个执行? - Gabriel
1
另外,如果您想推送在 git fetch upstream 中检索到的新标签,则执行 git push --tags - DavidH
当我运行 git fetch upstream 时,它会产生 "fatal: 'upstream' does not appear to be a git repository" 的错误。但是显式地添加它,就像这样 git remote add upstream <upstream_url> 就可以解决这个问题。 - sh37211
1
@sh37211 很好的观点。我已经编辑了答案,使其更加清晰明了。 - VonC
显示剩余2条评论

2
请按照以下步骤操作:
  1. 列出所有远程仓库,以确认是否有上游(原始)仓库:

    git remote -v

  2. 如果没有看到原始远程仓库,请输入以下命令添加。通常称为“upstream”,而不是您分叉的远程仓库“origin”。

    git remote add upstream <原始远程仓库路径>

  3. 验证已将其添加为名为“upstream”的远程仓库,并确认它在“fetch”和“push”操作中都列出。

    git remote -v

  4. 获取新创建的分支(在您分叉之后):

    git fetch upstream

  5. 列出所有分支以确认您可以看到新创建的分支。

    git branch -a

现在,您可以本地检出分支以根据需要进行操作。

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