跳至主要内容

同步分叉

同步仓库的分叉,以便保持与上游仓库的最新状态。

谁可以使用此功能?

拥有分叉仓库写入权限的人员可以将分叉同步到上游仓库。

平台导航

从网页 UI 同步分叉分支

  1. 在 GitHub 上,转到您想要与上游仓库同步的分叉仓库的主页。

  2. 在文件列表上方,选择 同步分叉 下拉菜单。

    Screenshot of the main page of a fork. A dropdown menu, labeled with a sync icon and "Sync fork," is outlined in dark orange.

  3. 检查来自上游仓库的提交详情,然后点击 更新分支

如果上游仓库的更改导致冲突,GitHub 将提示您创建拉取请求来解决冲突。

使用 GitHub CLI 同步分叉分支

GitHub CLI 是一款开源工具,可让您在计算机的命令行中使用 GitHub。使用命令行时,您可以利用 GitHub CLI 节省时间并避免切换上下文。如需了解更多关于 GitHub CLI 的信息,请参阅 关于 GitHub CLI

要从上游仓库更新远程分叉,请使用 gh repo sync -b BRANCH-NAME 子命令,并将您的分叉和分支名称作为参数提供。

gh repo sync owner/cli-fork -b BRANCH-NAME

如果上游仓库的更改导致冲突,GitHub CLI 将无法同步。您可以设置 --force 标志来覆盖目标分支。

从命令行同步分叉分支

在您能够将分叉与上游仓库同步之前,必须在 Git 中配置一个指向上游仓库的远程仓库。有关更多信息,请参阅 为分叉配置远程仓库

  1. 打开 终端终端Git Bash

  2. 将当前工作目录更改为本地项目所在目录。

  3. 从上游仓库获取分支及其相应的提交。对 BRANCH-NAME 的提交将存储在本地分支 upstream/BRANCH-NAME 中。

    $ git fetch upstream
    > remote: Counting objects: 75, done.
    > remote: Compressing objects: 100% (53/53), done.
    > remote: Total 62 (delta 27), reused 44 (delta 9)
    > Unpacking objects: 100% (62/62), done.
    > From https://github.com/ORIGINAL-OWNER/ORIGINAL-REPOSITORY
    >  * [new branch]      main     -> upstream/main
    
  4. 检出分叉的本地默认分支——在此示例中,我们使用 main

    $ git checkout main
    > Switched to branch 'main'
    
  5. 将上游默认分支(在此示例中为 upstream/main)的更改合并到本地默认分支。这会使您的分叉默认分支与上游仓库保持同步,同时保留本地更改。

    $ git merge upstream/main
    > Updating a422352..5fdff0f
    > Fast-forward
    >  README                    |    9 -------
    >  README.md                 |    7 ++++++
    >  2 files changed, 7 insertions(+), 9 deletions(-)
    >  delete mode 100644 README
    >  create mode 100644 README.md
    

    如果本地分支没有任何独有的提交,Git 将执行快进合并。更多信息请参阅 Git 文档中的 基本分支与合并

    $ git merge upstream/main
    > Updating 34e91da..16c56ad
    > Fast-forward
    >  README.md                 |    5 +++--
    >  1 file changed, 3 insertions(+), 2 deletions(-)
    

    如果本地分支有独有的提交,您可能需要解决冲突。更多信息请参阅 处理合并冲突

提示

同步分叉仅会更新您本地的仓库副本。要在 GitHub.com 上更新分叉,您必须 推送更改

© . This site is unofficial and not affiliated with GitHub, Inc.