C
コラボレーション & Git/Git基礎/Lesson 02

Git 基礎 — コマンド・.gitignore・GitHub を一度に

30分·theory

Git 基礎 — コマンド・.gitignore・GitHub を一度に

🎯 このレッスンを読み終えたら

このレッスンをすべて読み終えると、以下の3つを自信を持ってできるようになります。

  • ✅ Gitの3つの領域:working directory / staging area / repository
  • ✅ 基本コマンド:commit · branch · merge
  • ✅ Conventional Commits メッセージの書き方

学習目標をチェックリスト形式で持ち、すべて答えられるようになったらレッスンを閉じましょう。

日常的なGitワークフロー 6ステップ

1. 編集 — Working Directory でコードを修正
2. git add — 変更ファイル → Staging Area へ移動
3. git commit -m — Staging → Local Repo。メッセージで変更を要約
4. git push — Local → Remote (GitHub)。チームと共有
5. git pull — Remoteの変更 → Local。チームメンバーの作業を同期
6. branch / merge — 機能ごとに分岐し、完成後に main へマージ

> 💡 ポイント:編集 (Working) → 準備 (Staging) → 保存 (Repo) → 共有 (Remote) の4ステップモデル。

💻 📌 必須 Git コマンド
# ============================================
# このコマンドがすること: Git基本ワークフローの全体的な流れ
# 実生活の例: 文書作業 → レビュー → 保存 → 共有プロセス
# ============================================

# === 基本ワークフロー ===
# 現在の作業ディレクトリの状態を確認 (どのファイルが変更されたか)
git status                    # 現在の状態確認
# 特定のファイルのみステージング (コミット前のレビューエリアに上げる)
git add file.txt              # 特定のファイルをステージング
# すべての変更されたファイルを一度にステージングエリアに上げる
git add .                     # すべての変更ファイルをステージング
# -m フラグ = コミットメッセージをインラインで作成 (なければvimエディタが開く)
git commit -m "メッセージ"        # コミット作成
# 結果: [main abc1234] メッセージ / 1 file changed, 1 insertion(+)

# === 履歴確認 ===
# 全体のコミット履歴確認 (作成者、日付、メッセージを含む)
git log                       # コミット履歴を見る
# --oneline = コミットID + メッセージだけを一行で要約出力
git log --oneline             # 一行で見る
# --graph = ブランチの分岐/合流をASCIIアートで視覚化
git log --graph               # グラフで見る
# 特定のコミットIDの変更内容(diff)とメタデータの詳細確認
git show abc123               # 特定のコミット詳細を見る

# === リモートリポジトリ ===
# 接続されたリモートリポジトリURLリスト (fetch/push URLを区別して出力)
git remote -v                 # リモートリポジトリリスト
# ローカルコミットをorigin(リモート)のmainブランチにアップロード
git push origin main          # リモートにプッシュ
# リモートの変更事項を取得して現在のブランチに自動マージ
git pull origin main          # リモートから取得
# リモート情報だけを取得し、自動マージはしない (安全な確認後にマージ可能)
git fetch origin              # リモート情報だけを取得

# === 変更取り消し ===
# Working Directoryの変更事項を破棄 (ステージング前の状態に復元)
git checkout -- file.txt      # ファイルの変更を取り消し
# Staging Areaから外しWorking Directoryに戻す
git reset HEAD file.txt       # ステージングを取り消し
# 最後のコミットメッセージを再作成 (コミットをプッシュしていない場合のみ安全)
git commit --amend            # 最後のコミットを修正

.gitignore — 絶対にプッシュしてはいけないもの

1. 新規プロジェクト — github.com/github/gitignore のテンプレートをコピー&ペースト(Node・Python・Java など)
2. パターン構文*.log(拡張子)/ node_modules/(フォルダ)/ !important.log(例外)
3. 確認git status で確認。無視されるべきファイルが untracked で表示される場合は .gitignore に漏れがある
4. すでにコミット済みのファイル — .gitignore に追加してもトラッキングは継続。git rm --cached <file> でトラッキングを解除
5. グローバル .gitignore~/.gitignore_global(全プロジェクト共通、例:.DS_Store
6. CI スキャン — GitHub Actions で truffleHoggit-secrets を使って機密ファイルをスキャン

> ⚠️ よくあるミス:.env.key.pem.aws/credentials の漏れ → シークレットが露出。一度プッシュするとgit履歴に永久に残ります。

GitHub コア機能 6つ

1. Repository — プロジェクトの保存場所。public/private。README・LICENSE・.gitignore・.github/。fork・star・watch
2. Issues — バグ・機能リクエスト・議論。label・milestone・assignee。PRと自動連携(Closes #123
3. Pull Request — fork・branch で変更後、本体へのマージをリクエスト。コードレビュー・CI・承認後にマージ
4. Actions (CI/CD).github/workflows/*.yml — push・PR 時に自動ビルド・テスト・デプロイ。パブリックリポジトリは無料
5. Codespaces — ブラウザ内の VS Code + コンテナ。ローカルセットアップ不要。PRレビュー・コントリビューションが即時可能
6. Copilot — AI ペアプログラマー。コード自動補完・PRサマリー・Issue への回答

> 🔗 GitHub 創設者:Tom Preston-Werner・Chris Wanstrath・PJ Hyett・Scott Chacon(2008年)→ 2018年 Microsoft が買収 → 2025年 1億人以上の開発者。

git reset · revert · cherry-pick · stash — *元に戻す4つのコマンド*

git reset — 過去へのタイムトラベル

bash
git reset --soft  HEAD~1     # コミットのみ取り消し、ステージ・作業は維持
git reset --mixed HEAD~1     # コミット・ステージ取り消し、作業は維持 (デフォルト)
git reset --hard  HEAD~1     # すべて削除 — *危険*

3つのオプション比較

オプションHEADIndex (Staged)Working Dir
--soft移動保持保持
--mixed(デフォルト)移動リセット保持
--hard移動リセットリセット

最もよく使うシナリオ

bash
# 最後のコミットメッセージだけを再作成したい
git reset --soft HEAD~1
# 同じ変更事項がstageされた状態 → git commit 再び

# 最後のコミットを丸ごと取り消して変更事項だけを維持
git reset HEAD~1     # --mixed デフォルト
# 作業本はそのまま、stageは空になる → 再び作業

# 本当にすべてを消したい (CTRL+Z の究極版)
git reset --hard origin/main
# *リモートが安全な出発点* の場合のみ

⚠️ reset --hard の危険性

  • 作業中の変更が消える(コミットしていないもの)
  • すでにプッシュしたコミットを reset すると — 他の人と競合 + force push が必要 + 履歴が壊れる

共有ブランチでは reset 禁止。 自分のローカルのみ。

git revert — パブリックブランチの安全な元に戻し

bash
git revert <コミットハッシュ>

「元に戻す新しいコミット」を追加する。 履歴は保持され、変更のみが取り消される。

code
# revert 前:  A → B → C
# revert C:   A → B → C → C'  (C の反対変更)

main ブランチの問題のあるコミットを元に戻す際の標準的な方法。 他の人の git pull にも自然に適用される。

reset vs revert 一言まとめ

  • reset履歴を書き換える。 ローカルのみ。
  • revert元に戻す新しいコミットを追加する。 どこでも安全。

git cherry-pick — 特定のコミットだけを取り込む

bash
# feature ブランチのコミット abc1234 だけを main へ
git checkout main
git cherry-pick abc1234

ホットフィックスを stable ブランチへバックポート するときによく使う。または 大きなPRの一部だけ を先にマージするときにも。

bash
# 複数
git cherry-pick abc1234..def5678        # 範囲
git cherry-pick abc1234 def5678 ghi9012  # 列挙

git stash — 一時保存

シナリオ:作業中に突然別のブランチへ移動しなければならない。

bash
git stash             # 変更事項を一時保存
git checkout other
# ... 他の作業 ...
git checkout original
git stash pop          # 復元

コミットせずにきれいに移動するための標準的な方法。

bash
git stash list             # 保存されたstashリスト
git stash apply stash@{2}  # 特定のstashを適用 (pop は適用+削除)
git stash drop stash@{0}   # 特定のstashを削除
git stash branch tmp       # stash を新しいブランチに分離

.gitignore 実践パターン

code
# 依存性
node_modules/
.venv/
__pycache__/
*.pyc

# ビルド結果
dist/
build/
.next/
target/

# 環境変数・秘密
.env
.env.local
.env.*.local
*.pem
*.key

# IDE
.vscode/
.idea/
*.swp
.DS_Store

# ログ
*.log
logs/

# キャッシュ
.cache/
.parcel-cache/

プロジェクト開始時にすぐに作成しましょう。 https://gitignore.io で 技術スタック別に自動生成 できます。

コミットメッセージ — bad/good

code
❌ "修正しました"
✅ fix(auth): handle null user in login flow

❌ "機能追加"
✅ feat(payment): add Stripe webhook handler

❌ "バグ"
✅ fix(api): correct 500 error when user_id is missing

❌ "リファクタリング"
✅ refactor(db): extract user query into repository

Conventional Commits 標準:

code
<type>(<scope>): <description>

types: feat, fix, docs, style, refactor, test, chore, perf

1行目は50文字以内、本文は72文字で折り返し。 英語の 命令形現在形 を使用。

🤖 AIへのプロンプト例

  • 「最後のコミットを取り消して変更だけをステージに残すgitコマンドを教えて」
  • 「この変更をConventional Commitsのメッセージで書いて」
  • 「この.gitignoreがNode.js + Python + Java環境に十分かレビューして」