# 同步分支

使用 Web 界面、GitHub CLI 或命令行将分支存储库与其上游存储库同步。

## 从 Web UI 同步分叉分支

1. 在上 GitHub，导航到要与上游存储库同步的分支存储库的主页。
2. 在文件列表上方，选择“Sync fork”下拉菜单。

   ![分叉主页的屏幕截图。 标有同步图标和“同步叉”的下拉菜单以深橙色框出。](/assets/images/help/repository/sync-fork-dropdown.png)
3. 查看有关上游存储库提交的详细信息，然后点击“更新分支”按钮。

如果来自上游存储库的更改导致冲突， GitHub 将提示你创建拉取请求以解决冲突。

## 将分叉分支与 GitHub CLI

GitHub CLI 是用于从计算机的命令行使用 GitHub 的开源工具。 从命令行操作时，您可以使用 GitHub CLI 来节省时间并避免切换上下文。 若要了解详细信息 GitHub CLI，请参阅 [关于 GitHub CLI](/zh/enterprise-server@3.22/github-cli/github-cli/about-github-cli)。

要从其父库更新远程派生库，请使用 `gh repo sync -b BRANCH-NAME` 子命令并提供派生库和分支名作为参数。

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

如果来自上游存储库的更改导致冲突， GitHub CLI 则无法同步。若要覆盖目标分支，请使用 `--force` 标志。

## 从命令行同步分叉分支

必须先在 Git 中配置指向上游存储库的远程库，然后才能将分支与上游存储库同步。 请参阅“[为分支配置远程存储库](/zh/enterprise-server@3.22/pull-requests/how-tos/work-with-forks/configuring-a-remote-repository-for-a-fork)”。

1. 打开终端或 Git Bash。

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

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

   ```shell
   $ 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://HOSTNAME/ORIGINAL-OWNER/ORIGINAL-REPOSITORY
   >  * [new branch]      main     -> upstream/main
   ```

4. 查看分支的本地默认分支。 在本例中，我们使用 `main`。

   ```shell
   $ git checkout main
   > Switched to branch 'main'
   ```

5. 将上游默认分支中的更改合并到本地默认分支。 在此示例中，上游默认分支为 `upstream/main`。 这会将分支的默认分支与上游存储库同步，而不会丢失本地更改。

   ```shell
   $ 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 文档中 [的基本分支和合并](https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging) 。

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

   如果您的本地分支有独有提交，您可能需要解决冲突。 请参阅“[合并、关闭拉取请求](/zh/enterprise-server@3.22/pull-requests/how-tos/merge-and-close-pull-requests)”。

> \[!TIP]
> 同步您的 fork 只会更新存储库的本地副本。 若要更新分支 你的 GitHub Enterprise Server 实例，必须 [推送更改](/zh/enterprise-server@3.22/get-started/using-git/pushing-commits-to-a-remote-repository)。