# フォークを同期する

Web インターフェイス、GitHub CLI、またはコマンド ラインを使用して、フォークされたリポジトリをアップストリーム リポジトリと同期します。

## Web UI からフォークのブランチを同期する

1. GitHubで、アップストリーム リポジトリと同期するフォークされたリポジトリのメイン ページに移動します。
2. ファイルのリストの上で、 **\[フォークの同期]** ドロップダウン メニューを選んでください。

   ![フォークのメイン ページのスクリーンショット。 同期アイコンと \[フォークの同期\] のラベルが付いたドロップダウン メニューが、濃いオレンジ色の枠線で囲まれています。](/assets/images/help/repository/sync-fork-dropdown.png)
3. アップストリーム リポジトリからのコミットの詳細を確認し、 **\[ブランチを更新]** をクリックします。

アップストリーム リポジトリからの変更によって競合が発生した場合、 GitHub は競合を解決するためのプル要求を作成するように求められます。

## フォーク ブランチと 〗〘の同期 GitHub CLI

GitHub CLI は、コンピューターのコマンド ラインから GitHub を使用するためのオープン ソース ツールです。 コマンドラインから作業しているときは、GitHub CLI を使用して時間を節約し、コンテキストの切り替えを回避できます。
GitHub CLIの詳細については、「[GitHub CLI について](/ja/enterprise-server@3.21/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 でアップストリーム リポジトリを指すリモートを構成する必要があります。 「[フォーク用のリモート リポジトリの構成](/ja/enterprise-server@3.21/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(-)
   ```

   ローカル ブランチに一意のコミットがある場合は、競合の解決が必要になる場合があります。 「[プル リクエストをマージして閉じる](/ja/enterprise-server@3.21/pull-requests/how-tos/merge-and-close-pull-requests)」を参照してください。

> \[!TIP]
> フォークの同期では、リポジトリのローカル コピーだけが更新されます。
> お使いの GitHub Enterprise Server インスタンスでフォークを更新するには、[変更をプッシュ](/ja/enterprise-server@3.21/get-started/using-git/pushing-commits-to-a-remote-repository)する必要があります。