プログラミング ソフトウェア 公開日 2026.07.03 更新日 2026.07.03

Gitのforkとcloneの違いは?使い分けとOSS貢献の流れを実務目線で

Gitのforkとcloneの違いを実務目線で整理します。最大の違いは「どこにコピーを作るか」で、forkはGitHub上の自分のアカウントにコピーを作る機能、cloneはリポジトリを手元のPCに複製するgitコマンドです。そもそもforkはgitの機能ではない点、cloneだけでよい場面とforkが要る場面、OSS貢献のfork→clone→pull requestの流れ、origin/upstreamの整理、よくある誤解まで、GitHub公式を確認しながらまとめます。

目次(16項目)

先に要点

  • いちばんの違いは 「どこにコピーを作るか」。fork は GitHub 上の自分のアカウントにコピーを作る、clone はリポジトリを手元のPC(ローカル)に複製する。作られる場所が違います。
  • そもそも fork は GitHub / GitLab などの機能で、git のコマンドではありません。git fork というコマンドは存在しません。一方 clone は git clone という git 標準のコマンドです。
  • 書き込み権限があるリポジトリなら clone だけでOK。他人のリポジトリに変更を提案したい(権限が無い)ときに forkを使い、自分のコピーを経由して プルリクエストを送ります。
  • OSS貢献の定番は fork(GitHub) → clone(ローカル) → ブランチで編集 → 自分のforkにpush → 元リポジトリへPull Requestという流れです。
  • fork した自分のコピーは元リポジトリ(upstream)と つながりが残るため、PRで変更を還元でき、元の更新を取り込んで同期もできます。単なる clone は手元の複製で、その連携経路は持ちません。

fork と clone、どっちも「コピー」でしょ?何が違うの? ── Git を使い始めると必ずぶつかる疑問です。どちらもリポジトリを複製する操作に見えますが、コピーが作られる場所も、そもそもの仕組みの層も違います。ここを取り違えると、「権限が無くて push できない」「PRの送り先が分からない」と詰まります。

この記事では、両者の違いを 「どこにコピーが作られるか」→ そもそも fork は git ではない → clone だけでよい場面 / fork が要る場面 → OSS貢献の流れ → origin と upstream の整理の順で実務目線で整理します。定義はGitHub公式のAbout forksを確認しながらまとめています。Git そのものが曖昧ならGitの用語集もどうぞ。

いちばんの違い:どこにコピーを作るか

まず結論です。fork と clone は「コピーを作る場所」が違います。

コピーが作られる場所の違い
  1. 1

    fork(GitHub上でコピー)

    元リポジトリ(他人のGitHubリポジトリ) → 自分のGitHubアカウント上に新しいコピーができる。サーバー側の複製。

  2. 2

    clone(ローカルにコピー)

    GitHub上のリポジトリ → 自分のPC(手元)にダウンロードされる。ローカルの複製。git cloneコマンドで実行。

  • fork ── GitHub 上で、元リポジトリのコピーを自分のアカウントの下に作る。あくまで サーバー(GitHub)側での複製で、手元にはまだ何も落ちてきません。fork したコピーは自分専用で、独自にブランチやコミットを積めます。
  • clone ── GitHub 上のリポジトリを、自分のPCに丸ごとダウンロードする。ローカル(手元)側への複製で、ここで初めてコードをエディタで開いて編集できます。実行は git clone リポジトリのURL。

つまり、fork は「GitHub上に自分用の出発点を作る」、clone は「その出発点を手元に持ってくる」という、別々のステップです。多くのOSS貢献では、この2つを順番に両方やります。

そもそも fork は git の機能ではない(ここが重要)

もう一つの本質的な違いがこれです。fork は GitHub や GitLab などのホスティングサービスが提供する機能であって、git 本体のコマンドではありません。GitHub公式も fork を「元(upstream)リポジトリとコードや公開設定を共有する新しいリポジトリ」と説明し、あくまで GitHub 上の操作として扱っています。

観点forkclone
正体GitHub / GitLab の機能(概念)git の標準コマンド
コマンド無し(画面のForkボタン等で操作)git clone URL
コピー先自分のGitHubアカウント(サーバー側)自分のPC(ローカル)
元との関係upstreamとつながり、PRで還元できるoriginとして参照(手元の複製)
主な目的権限の無いリポジトリに変更を提案する起点手元でコードを取得して作業する
独自のIssue/PR持つ(forkは独立したリポジトリ)持たない(ローカルの作業コピー)

だから「fork と clone、どちらの git コマンドを使う?」という問い自体が少しずれています。fork は GitHub の画面(またはAPI)で行う操作、clone は git のコマンド、と層が違うものとして捉えると混乱しません。

clone だけでよい場面 / fork が要る場面

実務で迷うのは「fork すべきか、clone だけでいいか」です。判断軸は そのリポジトリに直接 push する権限があるかの一点です。

forkが要るか、cloneだけでよいか

権限あり

cloneだけでよい

自分のリポジトリや、書き込み権限のあるチームのリポジトリ。

  • 自分が作ったリポジトリを手元で作業する
  • 会社/チームでメンバーとして招待され、直接pushできる
  • ブランチを切ってpushし、そのままPull Requestを出せる
  • forkは不要。git cloneして作業を始める

こんな人向け自分・所属チームのリポジトリ

権限なし

forkしてからcloneする

他人の公開リポジトリ(OSSなど)に変更を提案したいとき。

  • 元リポジトリへ直接pushする権限が無い
  • まずforkして自分のアカウントにコピーを作る
  • そのforkをcloneして手元で編集・push
  • 元リポジトリへPull Requestで変更を提案する

こんな人向けOSSへの貢献・外部リポジトリへの提案

ポイントは、「単に手元で動かしたい・読みたい」だけなら clone で十分だということです。fork が要るのは、直接 push できない他人のリポジトリに、自分のコピーを経由して変更を提案したいときです。逆に、自分やチームの書き込み権限があるリポジトリを無闇に fork すると、かえって管理が煩雑になります。

OSS貢献の定番フロー(fork → clone → pull request)

fork と clone の関係がいちばんはっきりするのが、OSSに貢献するときの流れです。GitHub公式も、fork の変更はPull Requestで元(upstream)へマージできる、と説明しています。

外部リポジトリへ貢献する手順

  1. 1
    forkする(GitHub上)

    貢献したいリポジトリのページでForkし、自分のアカウントにコピーを作る。ここはGitHubの操作でコマンドは使わない。

  2. 2
    cloneする(ローカルへ)

    作ったforkのURLを git clone で手元に落とす。これで自分のPCで編集できるようになる。

  3. 3
    ブランチを切って編集・コミット

    作業用ブランチを作り、変更してコミット。mainに直接積まず、テーマごとにブランチを分けるのが定石。

  4. 4
    自分のforkにpush

    コミットを自分のfork(origin)へpushする。この時点では元リポジトリには影響しない。

  5. 5
    Pull Requestを送る

    自分のforkから元リポジトリ(upstream)へPull Requestを作成し、変更をレビュー・マージしてもらう。

この流れの中で、fork は最初の1回(GitHub上)、clone はそれを手元に持ってくる1回だけ登場します。あとの編集・コミット・pushは通常の git 操作です。「fork = 貢献の入口を用意する」「clone = 手元で作業できるようにする」と役割で覚えると、順番も自然に頭に入ります。

origin と upstream の整理(forkワークフローで混乱しないために)

fork を使うと、リモートが2つ登場して混乱しがちなので整理します。

origin

自分がcloneしてきた先。forkワークフローでは「自分のfork」を指す。push先はここ。

upstream

元の(本家)リポジトリ。ここへ直接pushはできない。Pull Requestの送り先であり、最新を取り込む元。

forkを最新に保つ

本家が進んだら、upstreamの変更を取り込んで自分のforkを同期する。放置すると差が開いてPRが衝突しやすい。

自分のリポジトリを clone しただけなら、リモートは origin の1つだけで足ります。fork ワークフローのときだけ、本家を upstream として追加で登録し、push は origin(自分のfork)へ、最新の取り込みは upstream から、と使い分けるのが定番です。

Gitのforkとcloneに関するよくある質問

fork と clone の一番の違いは何ですか?

コピーが作られる場所です。fork は GitHub 上の自分のアカウントにコピーを作る機能、clone はリポジトリを手元のPCに複製する git コマンドです。fork はサーバー側、clone はローカル側の複製で、層も目的も異なります。

git fork というコマンドはありますか?

ありません。fork は GitHub / GitLab などのホスティングサービスの機能で、画面のForkボタンやAPIで行います。git 標準のコマンドは git clone のほうで、fork に相当する git コマンドは存在しません。

fork せずに clone だけではダメですか?

自分やチームの書き込み権限があるリポジトリなら、clone だけで十分です。ブランチを切って push し、そのままPull Requestを出せます。fork が要るのは、直接 push できない他人のリポジトリに変更を提案したいときだけです。

fork したリポジトリは元と連動しますか?

自動では同期しません。fork は独立したリポジトリとして独自のブランチ・Issue・Pull Requestを持ちますが、元(upstream)とのつながりは残るため、Pull Requestで変更を還元したり、upstreamの更新を取り込んで手動で同期したりできます。放置すると差が開くので、こまめに同期するのがおすすめです。

clone した後に fork が必要になったらどうしますか?

先に自分のPCへ clone してしまい、後から fork が必要だと気づくこともあります。その場合は GitHub で fork を作り、手元リポジトリの origin を自分のfork に付け替え、本家を upstream として追加すれば、そのまま fork ワークフローに移れます。作業内容を作り直す必要はありません。

download(ZIPダウンロード)と clone は違いますか?

違います。ZIPダウンロードはその時点のファイル一式を落とすだけで、コミット履歴もgitのつながりもありません。clone は履歴を含むリポジトリ全体を複製し、そのまま commit や push ができます。あとで変更を管理するなら clone を使います。

まとめ

Gitの fork と clone は、どちらも「コピー」ですが、作られる場所と仕組みの層が違います。fork は GitHub 上の自分のアカウントにコピーを作る機能(gitコマンドではない)、clone はリポジトリを手元のPCに複製する git コマンドです。判断は「そのリポジトリに直接 push できるか」で、権限があれば clone だけ、無ければ fork してから clone。OSS貢献では fork → clone → ブランチ編集 → push → Pull Request の流れが定番で、origin(自分のfork)と upstream(本家)を使い分ければ迷いません。clone した後にリモートの最新を取り込む操作でつまずくなら、git pullとgit fetchの違いもあわせて読むと、取得と取り込みの切り分けが整理できます。

参考リンク

あとで見返すならここで保存

読み終わったあとに残しておきたい記事は、お気に入りからまとめて辿れます。