無料プレビュー 3 / 14

リポジトリと commit の心象モデル — Git の世界観

学習目標

このレッスンを終えると、次のことができるようになります。

  • リポジトリ・commit・ハッシュの 3 つの概念を比喩で説明できる
  • git init と git clone の違いを 1 行で言える
  • commit を「セーブポイント」として捉える心象モデルを持てる

まずは比喩で

Git は概念が多くてとっつきにくいが、TV ゲームのセーブデータの比喩で理解すると一気に楽になる。

Git の用語 TV ゲームでの対応物
リポジトリ (repository) ゲームのセーブデータが入っているメモリーカード全体
commit (コミット) セーブポイント。「ここで保存しておこう」と決めて作る
commit ハッシュ 各セーブデータの管理番号 (a1b2c3d のような英数字)
HEAD いま開いているセーブデータ
branch (ブランチ) 「もしも分岐シナリオ」を試すためのセーブスロット

セーブポイント (commit) は 後から好きな時点に戻せる。途中で間違えても安心。

リポジトリとは

リポジトリ (repository、略称 repo) = 1 つのプロジェクトのファイル群 + その変更履歴を全部まとめたフォルダ。

my-project/                ← これがリポジトリ
├── .git/                  ← 履歴のすべてが入った隠しフォルダ (触らない)
├── README.md
├── src/
│   └── main.py
└── tests/
    └── test_main.py

.git/ フォルダの中に「過去の全 commit と branch の情報」が入っている。.git/ を削除するとそのリポジトリは「ただのフォルダ」に戻り、履歴は失われる。

リポジトリを作る 2 つの方法

方法 1: git init — 既存フォルダをリポジトリ化

新しいプロジェクトを今から始める時:

cd ~/projects
mkdir my-project
cd my-project
git init                  # → 「.git/」フォルダが作られる

これで my-project/ は Git で履歴管理されるようになる。

方法 2: git clone <URL> — 既存のリポジトリを取ってくる

すでに GitHub などに存在するプロジェクトに参加する時:

cd ~/projects
git clone https://github.com/compassdata/ailms.git
cd ailms                  # → 履歴も含めて全部ダウンロード済み

clone は 「コピー + 履歴ダウンロード + リモート設定」を一発でやる。新人がプロジェクトに合流するときの定型。

commit とは

commit = 「ここまでの変更を 1 つのまとまり (セーブポイント) として保存する」操作。

gitGraph commit id: "初期" commit id: "ログイン機能追加" commit id: "バグ修正" commit id: "ドキュメント更新"

各 commit には次の情報が記録される:

記録される情報 例
変更内容 (どのファイルがどう変わったか) src/login.py に 30 行追加
commit ハッシュ (一意の管理番号) a1b2c3d4e5f6... (40 文字)
著者 (誰が) 山田太郎 <yamada@example.com>
日時 (いつ) 2026-05-16 14:32:01
commit メッセージ (なぜ・何をしたか) "fix: ログイン後のリダイレクト先を /home に変更"

commit ハッシュの正体

a1b2c3d4e5f6... という英数字 40 桁は、変更内容と著者と日時から計算された指紋。同じ内容で同じ日時に同じ人がコミットしない限り、絶対にぶつからない。

普段は先頭 7 桁 (a1b2c3d) で参照する。GitHub の URL でも 7 桁が使われる:

https://github.com/compassdata/ailms/commit/a1b2c3d

セーブポイント (commit) の作り方 — 3 ステップ

flowchart LR W[作業ディレクトリ<br/>ファイルを編集] --> A[git add<br/>ステージング エリアに上げる] A --> C[git commit<br/>セーブポイント確定] C --> R[リポジトリ<br/>履歴に永久保存]
  1. ファイルを編集 — エディタ・AI Agent で変更を加える
  2. git add <ファイル名> — その変更を「次のセーブに含める」と宣言
  3. git commit -m "メッセージ" — 実際にセーブポイントを作る

実際の例:

# ファイル編集後
git status                          # 何が変わったか確認
git add src/login.py                # 1 ファイルだけステージング
git add -A                          # 変更全部をステージング (慎重に)
git commit -m "fix: ログイン後の遷移先修正"

なぜ「ステージング」という中間段階があるのか

flowchart TB W[10 ファイル編集<br/>うちログイン関連 3 + その他 7] --> Q{commit するか?} Q --> A1[git add で<br/>ログイン関連 3 だけ選択] A1 --> C1[git commit<br/>「fix: ログイン修正」] A1 --> A2[残り 7 ファイルは<br/>次の commit に回す] A2 --> C2[git commit<br/>「feat: 検索改善」]

ステージングがあると、「1 つの commit に意味のある単位の変更だけを入れる」ことができる。

「ログイン修正」と「検索機能改善」を別々の commit に分ければ、後で「ログイン修正だけ取り消したい」ことができる。

振り返り

  • リポジトリ = プロジェクトのフォルダ + 履歴 (.git/)
  • commit = セーブポイント。後から好きな地点に戻れる
  • ステージング (git add) があるから「意味のある単位」でセーブできる
  • ハッシュは内容から生成される一意な ID。先頭 7 桁で識別する

次のレッスンでは、git status / git log / git diff で今の状態と履歴を読む方法を学びます。

参考リンク

全 14 レッスンを、登録なしで無料で読めます。