プログラミング ソフトウェア 公開日 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公式を確認しながらまとめます。

先に要点

  • いちばんの違いは 「どこにコピーを作るか」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 は「コピーを作る場所」が違います

読み込み中...
  • 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 する権限があるかの一点です。

読み込み中...

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

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

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

読み込み中...

この流れの中で、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 してから cloneOSS貢献では fork → clone → ブランチ編集 → push → Pull Request の流れが定番で、origin(自分のfork)と upstream(本家)を使い分ければ迷いません。clone した後にリモートの最新を取り込む操作でつまずくなら、git pullとgit fetchの違いもあわせて読むと、取得と取り込みの切り分けが整理できます。

参考リンク

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

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