BEGINNER'S GUIDE
AIと一緒に学ぶバージョン管理
→ キーで次へ
ゴール: ひとりでGitを使ってコードを管理し、GitHubにpushできるようになる
Gitとは何か / なぜ必要か / インストール&初期設定
→ 「何を学ぶのか」を理解する
3つのエリア / add・commit / status・diff / push / ブランチ・PR
→ 手を動かしてコマンドを体験する
プロジェクト初期化 → 開発 → GitHub公開 → ブランチ → マージ
→ 実際の開発サイクルを一気通貫で見る
Claudeのワークフロー / コミット作法 / テスト / PR作成
→ AIがGitをどう使うか知る
コンフリクト / push拒否 / reset事故 / 秘密情報漏洩 / reflog
→ 困ったときの対処法を知る
.gitignore / コマンドまとめ / リファレンス
→ きれいなリポジトリを維持する
WITHOUT GIT
WITH GIT
Gitはバージョン管理システム。ファイルの変更履歴を全て記録し、いつでも過去の状態に戻れる。
いつ・誰が・何を変えたか全て記録。いつでも過去に戻れる。
複数人が同時に同じプロジェクトを編集。変更を統合できる。
本番を壊さず新機能を試せる。安全な実験場。
GitHubにコードを保存。PCが壊れても安心。
まずは言葉の意味を押さえよう
プロジェクトの「保管庫」。ファイルと全変更履歴がまとめて管理される場所。git init で作成する。
ローカル = 自分のPC上のリポジトリ
リモート = GitHub上のリポジトリ
この2つを同期して使う。
リモートのリポジトリを丸ごとコピーして、自分のPCに持ってくること。git clone URL
変更を「記録」すること。ゲームのセーブポイントのようなもの。git commit -m "メッセージ"
ローカルのcommitをリモートに送ること。「アップロード」に近い。git push origin main
リモートの最新の変更をローカルに取得すること。「ダウンロード+統合」。git pull origin main
2つのリポジトリを行き来するイメージ
LOCAL(自分のPC)
git add / git commitgit push
→
git pull
git clone
REMOTE(GitHub)
clone = 最初に一度だけ。リモートをコピーしてローカルに作る
push = ローカル → リモートに送る(自分の変更を共有)
pull = リモート → ローカルに取る(他人の変更を取得)
Mac
brew install git
または Xcode Command Line Tools:xcode-select --install
Windows
winget install Git.Git
またはgit-scm.comからDL
Git Bashも一緒に入る
Linux
sudo apt install git
Fedora: dnf install git
全てのコミットにこの名前・メールが記録される。GitHubのメールと揃えるのが推奨。
GitHub → Settings → SSH and GPG Keys → New SSH Key に貼り付ける
↑ これが出ればOK!準備完了。
WORKING DIR
作業ディレクトリ
ファイルを編集する場所
git addSTAGING
ステージング
コミットする変更を選ぶ
git commitREPOSITORY
リポジトリ
履歴として永久保存
① ファイルを編集 → ② git add で選択 → ③ git commit で記録
この3ステップがGitの基本フロー
git status
今どんな変更があるか確認
git diff
具体的に何が変わったか確認
git status で全体把握 → git diff で詳細確認 → git add → git commit
バージョン管理ツール
ローカルPC上で動く
コマンドラインツール
変更履歴を管理
Gitリポジトリのホスティング
クラウド上のサービス
コードの共有・公開
チーム協業の場
Git = 手元で履歴管理 → git push → GitHub = クラウドに保存・共有
ターミナル操作
GitHub上の変化
git branch feature
新しいブランチを作成
git checkout feature
ブランチに切り替え
git merge feature
mainに統合
PRとは?
「この変更をmainに入れてください」というリクエスト。レビューしてからマージする。
user wants to merge 3 commits into main from feature/login
PRの流れ
git push でGitHubに送るHANDS-ON
アイデアからGitHub公開まで、一気通貫デモ
1️⃣
リポジトリ作成
2️⃣
開発 & コミット
3️⃣
GitHub公開
4️⃣
機能追加
5️⃣
確認 & マージ
プロジェクト構造
まだ何もない...
コミット履歴(main)
push後にここに反映される...
ブランチの様子
マージ後にここが更新される...
PART 3
Claude Code はなぜ・どうやってGitを使うのか
AIが書いたコードをgit diffで人間が確認してから反映できる
AIの変更がまずかったらgit revertで即座に元に戻せる
AIが何をしたか、コミットメッセージとして履歴に残る
AIの作業をブランチで隔離。本番には影響しない
STEP 1
git status
現状を把握
STEP 2
git diff
変更を確認
STEP 3
git log
スタイル確認
STEP 4
git add
ファイル選択
STEP 5
git commit
メッセージ付き
Claudeは慎重にGitを使う: statusで確認 → diffで変更把握 → logでコミットスタイルを読む → 適切なファイルだけadd → 意味のあるメッセージでcommit
必ずやること ✓
git status で確認git diff で変更内容を把握git addCo-Authored-By を付けるgit status で確認絶対しないこと ✗
git push --force 強制プッシュgit reset --hard 変更の破棄--no-verify フック無視git add -A 全ファイル追加テストとは?
「書いたコードが正しく動くか」を自動で検証するプログラム。
人間が毎回手動で確認する代わりに、コンピュータが一瞬でチェックする。
手動テスト
ブラウザで開いて
ボタンを押して
目で確認...
遅い・漏れる
自動テスト
コマンド1つで
全機能を検証
数秒で完了
速い・確実
なぜPR前に?
テストが通る = マージして大丈夫
単体テスト (Unit)
関数1つが正しく動くかaddTodo("買い物") → OK?
結合テスト (Integration)
複数の機能が連携して動くか追加→表示→削除 の流れ
Lint / Format
コードの書き方が統一されているかeslint, prettier
CI (自動実行)
push時にGitHub上で自動テストGitHub Actions
git init新しいリポジトリを作成
git clone URL既存リポジトリをコピー
基本git status変更状況を確認
git add ファイル変更をステージング
git commit -m "msg"変更を記録
確認git diff変更の差分を表示
git log --onelineコミット履歴を表示
共有git pushGitHubにアップロード
git pullGitHubから最新を取得
分岐git branch 名前ブランチを作成
git checkout 名前ブランチを切り替え
git merge 名前ブランチを統合
REAL WORLD PITFALLS
本当に痛い失敗と、その乗り越え方
コンフリクト
同じ行の衝突で
マージが止まる
push拒否
リモートが先に
進んでいてreject
reset --hard
未保存の作業が
一瞬で消滅
秘密情報push
APIキーが全世界に
公開。botが数秒で取得
間違いブランチ
数日作業した後に
mainだったと気づく
reflog
知らないと
復旧を諦めてしまう
なぜ起きる?
同じファイルの同じ行を別々のブランチで編集すると発生
解決手順
1. ファイルを開く
2. <<< === >>> を探す
3. 残したい方を選ぶ
4. マーカーを消す
5. add → commit
慌てない。落ち着いて1つずつ。
エラーメッセージを読んで、候補を消去法で絞り込む
認証エラー? SSH鍵が通ってない?
リモートURLが間違っている?
ブランチ名が違う?
リモートが自分より先に進んでいる?
判明した原因 & 対処
リモートに自分が持っていない変更がある。先にpullで取り込む必要がある。
merge時のエラーを読み解く思考プロセス
ファイルが壊れた? データが消えた?
mergeコマンドの書き方を間違えた?
別のファイルを編集したのに衝突?
同じファイルの同じ行を2箇所で編集した?
判明した原因 & 対処
同じ行への変更が衝突。ファイルを開いて手動で解決する。
エラーが出た!
1. エラーメッセージを読む
英語でも最初の1行にキーワードがある
2. git status で現状確認
今どのブランチ?未コミットの変更は?
rejected?
git pull
してから再push
conflict?
ファイルを開いて
マーカーを修正
detached?
git checkout
でブランチに戻る
わからない?
エラー文を
そのまま検索
💀
git reset --hard で作業消滅
StackOverflowの「解決策」を鵜呑みにして実行。未コミットの変更が一瞬で全消去。確認ダイアログなし。Ctrl+Zなし。
🔑
APIキーをpushした
ファイルを削除して再pushしても履歴に残っている。botが数秒でスキャンし、AWSキーなら数分で数千ドルの請求も。
😤 間違いブランチで数日作業
mainで直接3日間コード書いてた...
📦 コミットが巨大すぎる問題
「金曜にまとめてcommit」はGitの意味がない
Bad
"updated stuff"
+2847 lines
43 files
Good
"add login form"
+45 lines
3 files
なぜダメか:
git bisect が使えない→ 1機能 = 1コミット が目安
Gitは過去90日間のHEADの移動を全て記録している。ほぼ何でも復旧できる。
設定ファイル例
ignoreしないと何が起きる?
プロジェクト開始時に最初に作るファイル!
git init → .gitignore → 最初のcommit
.env
APIキー、DB接続先、パスワードなどの秘密情報
数KB
漏洩したら事故。絶対NG
node_modules/
npm install でDLされるライブラリ全部
数百MB
npm install で再生成できる
venv/
Python仮想環境。pipでDLしたライブラリ全部
数百MB
pip install -r requirements.txt で再生成
dist/
distributionの略。ビルド後の配布用ファイル(JS圧縮版等)
数MB
npm run build で再生成できる
build/
コンパイル・ビルドの出力先。distと同じ役割
数MB
ソースから何度でも作れる
.DS_Store
macOS Finderが自動生成。フォルダの表示設定を保存
数KB
mac固有。他のOSには無意味
Thumbs.db
Windowsが自動生成。画像サムネイルのキャッシュ
数KB
Windows固有。他のOSには無意味
__pycache__/
Pythonが自動生成するコンパイル済みファイル (.pyc)
数MB
実行すれば自動で作られる
.idea/
JetBrains IDEの設定。.vscode/ はVS Codeの設定
数KB
個人のエディタ設定。共有不要
*.log
アプリが出力するログファイル。デバッグ情報等
数MB〜
実行ごとに変わる一時データ
共通ルール: 再生成できるもの・秘密情報・個人環境固有のもの は全てignore
変更を記録して
いつでも戻れる
コードをクラウドに
チームで協業
AIの変更も履歴に
レビュー可能
まずは git init から始めよう!
失敗しても大丈夫。Gitがあれば戻れるから。
| コマンド | 説明 |
|---|---|
git config --global |
Gitのユーザー名・メールアドレスを設定 |
ssh-keygen |
SSH鍵を生成(GitHub認証用) |
git init |
新しいリポジトリを初期化 |
git clone URL |
既存のリポジトリをコピーして取得 |
git status |
作業ディレクトリの変更状況を確認 |
git diff |
変更内容の差分を表示 |
git add |
変更をステージングエリアに追加 |
git commit -m "msg" |
ステージングした変更を履歴に記録 |
git log |
コミット履歴を表示 |
git remote add origin URL |
リモートリポジトリを紐付け |
git push |
ローカルの変更をGitHubにアップロード |
git pull |
GitHubから最新の変更を取得・統合 |
git branch |
ブランチを作成・一覧表示 |
git checkout |
ブランチを切り替え |
git merge |
別のブランチの変更を現在のブランチに統合 |
git reset --hard |
指定したコミットまで強制的に巻き戻し(変更は消える) |
git reflog |
HEADの移動履歴を表示(resetで消えたコミットも復元可能) |
git revert |
指定したコミットを打ち消す新しいコミットを作成 |