クイックスタート(5分で始める)
難しいことは後から覚えれば大丈夫。まずはこの5ステップだけ覚えてください。
ステップ1:Gitをインストール
# macOS
brew install git
# Ubuntu/Debian
sudo apt install git
# Windows: https://git-scm.com からダウンロード
ステップ2:自分の名前を登録
git config --global user.name "あなたの名前"
git config --global user.email "you@example.com"
ステップ3:プロジェクトを作成
mkdir my-first-project
cd my-first-project
git init
ステップ4:作業を保存する(毎日やること)
# ファイルを作成
echo "Hello, World!" > hello.txt
# Gitに追跡させる
git add hello.txt
# スナップショットを保存(「コミット」する)
git commit -m "最初のファイルを追加"
ステップ5:GitHubにアップロード
git remote add origin https://github.com/あなた/my-first-project.git
git push -u origin main
買い物に例えると...
git add= 商品をカートに入れるgit commit= レジでお会計する(保存確定)git push= 商品を倉庫に発送する(GitHubにアップロード)
基本概念
Gitとは?
Gitは「バージョン管理システム」です。コードの変更履歴を自動で記録してくれるツールで、2005年にLinuxの作者リーナス・トーバルズが作りました。
簡単に言うと、コードのタイムマシンです。いつでも過去の状態に戻れます。
GitHubとは?
GitHubはGitリポジトリをインターネット上に保存するクラウドサービスです。Google Driveのコード版だと思ってください。
GitとGitHubの違い
| 項目 | Git | GitHub |
|---|---|---|
| 何か? | バージョン管理ソフト | クラウドホスティング |
| 動く場所 | 自分のパソコン | インターネット上 |
| インターネット | 不要 | 必要 |
| 料金 | 無料(オープンソース) | 基本無料(有料プランあり) |
| 例え | Word(ソフト) | OneDrive(クラウド保存) |
Gitの3つの状態
Gitでは、ファイルは常に3つの場所のどこかにいます:
作業ディレクトリ
ファイルを実際に編集する場所。まだGitは変更を記録していません。
ステージング(インデックス)
コミット前の「準備エリア」。買い物カートのようなものです。
リポジトリ
コミットされた変更が永久に保存される場所。Gitの歴史書です。
バージョン管理がない場合 vs ある場合
バージョン管理なし
レポート_最終版.docx
レポート_最終版v2.docx
レポート_最終版v2_修正済.docx
レポート_これを使え.docx
バージョン管理あり
レポート.docx
(全ての変更履歴付き)
基本コマンド
毎日使うコマンドです。この6つを覚えれば基本的な作業ができます。
git status - 今の状態を確認
「今どうなってる?」を教えてくれます。迷ったらまずこれを実行!
git status
# 出力例:
# ブランチ main
# 変更されたファイル:
# modified: app.py
# 追跡されていないファイル:
# new_file.txt
git add - ファイルをステージに追加
# 特定のファイルを追加
git add filename.txt
# すべてのファイルを追加
git add .
# 複数ファイルを追加
git add file1.txt file2.py
git commit - 変更を保存
# メッセージ付きでコミット
git commit -m "ログイン機能を追加"
# 追跡済みファイルを全てコミット(addをスキップ)
git commit -a -m "バグを修正"
良いコミットメッセージの書き方
良い例:
feat: ユーザー認証機能を追加fix: ログイン画面のクラッシュを修正docs: READMEにインストール手順を追加
悪い例:
修正した← 何を?更新← 具体性ゼロasdfasdf← 論外
git log - 履歴を見る
# コンパクト表示(おすすめ)
git log --oneline
# 出力例:
# a1b2c3d ログイン機能を追加
# e4f5g6h ナビバーのスタイル修正
# i7j8k9l 初期コミット
# グラフ付き(ブランチが見える)
git log --oneline --graph --all
git diff - 変更内容を確認
# まだステージしていない変更を見る
git diff
# ステージ済みの変更を見る
git diff --staged
ブランチ(分岐)
ブランチはGitの最も強力な機能です。コードの「パラレルワールド」を作れます。
mainブランチ = 出版された本
chapter-5-rewriteブランチ = 第5章の書き直し案
fix-typosブランチ = 誤字修正
それぞれ独立して作業し、良い変更だけを本編に合流(マージ)できます。
ブランチの基本操作
# ブランチ一覧を表示
git branch
# 新しいブランチを作成して切り替え
git switch -c feature/login
# ブランチを切り替え
git switch main
# ブランチを削除(マージ済みのみ)
git branch -d feature/login
# ブランチ名を変更
git branch -m old-name new-name
ブランチの命名規則
| 種類 | プレフィックス | 例 |
|---|---|---|
| 新機能 | feature/ |
feature/user-authentication |
| バグ修正 | bugfix/ |
bugfix/navbar-mobile |
| 緊急修正 | hotfix/ |
hotfix/security-patch |
| ドキュメント | docs/ |
docs/api-endpoints |
マージ(ブランチの合流)
# mainに切り替えてからマージ
git switch main
git merge feature/login
# マージを中止
git merge --abort
マージコンフリクト(衝突)の解決
2つのブランチが同じ行を変更した時に起きます。怖くありません!
# コンフリクトが発生すると、ファイルにマーカーが付きます:
<<<<<<< HEAD
username = "admin"
=======
username = "user"
>>>>>>> feature-login
# 解決方法:
# 1. ファイルを開いてマーカーを削除
# 2. 正しいコードだけを残す
# 3. 保存してコミット
git add conflict-file.py
git commit -m "コンフリクトを解決"
リモート操作(GitHub連携)
リモートリポジトリとは
GitHub上にあるリポジトリのコピーです。チームでの共同作業やバックアップに使います。
基本的なリモート操作
# リモートの確認
git remote -v
# リモートを追加
git remote add origin https://github.com/user/repo.git
# ローカルの変更をアップロード
git push -u origin main
# リモートの変更をダウンロード
git pull origin main
# リモートの変更を確認だけ(マージしない)
git fetch origin
push と pull の違い
git push= 自分の変更をGitHubに送信git pull= GitHubの変更を受信してマージgit fetch= GitHubの変更を確認するだけ(安全)
プルリクエスト(PR)
プルリクエストは「このブランチの変更をmainに取り込んでください」というリクエストです。
PRの作成手順
- フィーチャーブランチで作業してプッシュ
- GitHubで「Compare & pull request」をクリック
- タイトルと説明を書く
- レビュアーを指定
- レビュー後にマージ
.gitignore(除外ファイル)
Gitに追跡させたくないファイルを指定します。
# パスワードや秘密鍵
.env
*.key
# 依存パッケージ(サイズが大きい)
node_modules/
venv/
# ビルド出力
dist/
build/
# OS固有のファイル
.DS_Store
Thumbs.db
# IDE設定
.vscode/
.idea/
スタッシュ(一時保存)
作業中の変更を一時的に退避させる機能です。ブランチを急に切り替えたい時に便利。
# 変更を一時保存
git stash
# ブランチを切り替えて作業...
git switch main
# 戻ってきて復元
git switch feature-branch
git stash pop
変更の取り消し
| コマンド | 何をする? | 危険度 |
|---|---|---|
git restore ファイル名 |
未コミットの変更を破棄 | 低い |
git restore --staged ファイル名 |
ステージを取り消し | 安全 |
git reset --soft HEAD~1 |
コミットを取消し(変更は残る) | 中 |
git reset --hard HEAD~1 |
コミットと変更を完全削除 | 高い! |
git revert コミットID |
変更を打ち消す新コミット | 安全 |
実践ワークフロー(初級・中級・上級)
レベル別の実際の開発シナリオです。コピー&ペーストですぐに使えます。
初級:個人開発者向け
一人でプロジェクトを管理する場合のワークフローです。
例1:ポートフォリオサイトの管理
# === 初期設定(1回だけ) ===
mkdir portfolio
cd portfolio
git init
# ファイルを作成
echo "<h1>My Portfolio</h1>" > index.html
git add index.html
git commit -m "ポートフォリオのトップページ作成"
# GitHubに接続
git remote add origin https://github.com/you/portfolio.git
git push -u origin main
# === 毎日の作業 ===
# ファイルを編集して...
git status # 何が変わった?
git add . # 全部カートに入れる
git commit -m "プロジェクト紹介セクションを追加"
git push # GitHubにアップ
例2:学校の課題を安全に管理
# プロジェクトを初期化
cd python-assignment
git init
# 動くバージョンを保存
git add main.py
git commit -m "基本的な計算機能を実装"
# リスクのある変更を試す...
git add main.py
git commit -m "挑戦:関数電卓モードを追加"
# 壊れた!元に戻す
git revert HEAD
# これで動くバージョンに戻れました
中級:チーム開発(2〜5人)
ブランチとプルリクエストを使ったチーム開発のワークフローです。
例3:友達とWebアプリを開発
あなた=バックエンド担当、友達=フロントエンド担当
# === あなたの作業(バックエンド) ===
git clone https://github.com/team/todo-app.git
cd todo-app
# フィーチャーブランチを作成
git switch -c feature/api-endpoints
# APIを開発
git add server.py routes.py
git commit -m "feat: タスクCRUDエンドポイントを追加"
git add database.py
git commit -m "feat: SQLiteデータベース連携を追加"
# プッシュしてPRを作成
git push -u origin feature/api-endpoints
# GitHubでPull Requestを作成
# レビュー後にマージ
# ローカルをクリーンアップ
git switch main
git pull origin main
git branch -d feature/api-endpoints
例4:バグ報告への対応
ユーザーから「ログイン画面がモバイルでクラッシュする」との報告
# 最新のmainから開始
git switch main
git pull origin main
# バグ修正ブランチを作成
git switch -c bugfix/login-mobile-crash
# バグを調査して修正
git add login.css login.js
git commit -m "fix: モバイルでのログイン画面クラッシュを修正
ログインフォームのコンテナが固定幅だったため、
375px未満の画面でオーバーフローしていた。
max-widthとパーセント指定に変更。
Fixes #87"
# プッシュしてPRを作成
git push -u origin bugfix/login-mobile-crash
例5:コンフリクトの解決
# マージしようとしたらコンフリクト発生!
git switch main
git merge feature/update-config
# CONFLICT: Merge conflict in config.py
# config.pyを開くとこんな表示:
# <<<<<<< HEAD
# DATABASE_URL = "postgresql://localhost/myapp_v2"
# =======
# DATABASE_URL = "postgresql://localhost/myapp_production"
# >>>>>>> main
# チームメイトと相談して正しい方を残す
# マーカー(<<<, ===, >>>)を全て削除
git add config.py
git commit -m "fix: config.pyのコンフリクト解決、本番DB URLを使用"
上級:プロダクション環境 & オープンソース
例6:CI/CD付きの本格的な機能開発
# === 朝:機能開発の開始 ===
git switch main
git pull origin main
git switch -c feature/payment-integration
# === 小さなコミットで段階的に開発 ===
git add models/payment.py
git commit -m "feat: Stripe用の決済モデルを追加"
git add services/payment_service.py
git commit -m "feat: Stripe SDK使用の決済処理サービスを追加"
git add tests/
git commit -m "test: 決済システムのテストを追加"
# === PR前の整理 ===
git fetch origin
git rebase origin/main
# プッシュ(リベース後はforce-with-leaseが必要)
git push --force-with-lease origin feature/payment-integration
# CI/CDパイプラインが自動実行:
# ✅ リンター通過
# ✅ ユニットテスト通過
# ✅ セキュリティスキャン通過
# レビュー承認後、マージ
例7:オープンソースへの貢献
# === ステップ1:フォークしてクローン ===
# GitHubで「Fork」ボタンをクリック
git clone https://github.com/あなた/cool-library.git
cd cool-library
# 本家リポジトリを「upstream」として追加
git remote add upstream https://github.com/本家/cool-library.git
# === ステップ2:同期を保つ ===
git fetch upstream
git switch main
git merge upstream/main
# === ステップ3:修正ブランチで作業 ===
git switch -c fix/csv-unicode-error
# バグを修正...
git add parser.py
git commit -m "fix: CSVパーサーのUnicode BOM処理を修正"
# === ステップ4:自分のフォークにプッシュ ===
git push -u origin fix/csv-unicode-error
# === ステップ5:本家にPRを作成 ===
# GitHubで base=本家/main ← compare=あなた/fix/csv-unicode-error
例8:本番環境の緊急修正(ホットフィックス)
# === 緊急対応! ===
git switch main
git pull origin main
# ホットフィックスブランチ作成
git switch -c hotfix/fix-auth-crash
# 最小限の修正(余計な変更はしない!)
git add auth/session.py
git commit -m "hotfix: セッショントークンのnullチェック追加
本番ユーザーが500エラーを受けていた原因は、
期限切れトークンがnullを返す際のチェック漏れ。
Incident: INC-2024-0892"
# 即座にプッシュ → 緊急レビュー → マージ
git push -u origin hotfix/fix-auth-crash
# リリースタグを付ける
git switch main
git pull origin main
git tag -a v2.3.1 -m "Hotfix: 認証クラッシュ修正"
git push origin v2.3.1
例9:リリース管理
# === リリースブランチ作成 ===
git switch develop
git pull origin develop
git switch -c release/v2.0.0
# バグ修正のみ(新機能は追加しない!)
git commit -m "fix: バージョン番号を2.0.0に更新"
# === mainにマージ → タグ付け ===
git switch main
git merge release/v2.0.0
git tag -a v2.0.0 -m "Release v2.0.0"
git push origin main --tags
# === developにもマージ ===
git switch develop
git merge main
git push origin develop
レベル別まとめ
| レベル | 対象 | 主なスキル | 例 |
|---|---|---|---|
| 初級 | 個人開発者・学生 | add, commit, push, log | ポートフォリオ、ノート、課題 |
| 中級 | 小チーム(2〜5人) | ブランチ、PR、コンフリクト解決 | Webアプリ、チーム開発 |
| 上級 | プロチーム・OSS | リベース、CI/CD、リリース | 本番アプリ、OSS貢献 |
チートシート
毎日使うコマンド
ブランチ操作
取り消し・復元
リモート操作
毎日のワークフロー
よくある間違いと対処法
mainに直接コミットしてしまった
git branch feature-name
git reset --hard origin/main
git switch feature-name
pushする前にpullを忘れた
git pull --rebase origin main
git push
秘密情報をコミットしてしまった
# push前なら:
git rm --cached .env
git commit --amend
# push後なら:
# すぐにAPIキーを無効化!
パニック時の対処法
# 1. 落ち着く
git status # 状態確認
git log # 履歴確認
git reflog # 全操作履歴
# reflogで任意の時点に戻れます
学習リソース
公式ドキュメント
インタラクティブ学習
おすすめの習慣
- 毎日:頻繁にコミット、明確なメッセージ
- 毎週:古いブランチを整理
- 毎月:新しいGitコマンドを1つ覚える
Gitは練習あるのみです。最初はシンプルに始めて、慣れてきたら高度な機能を使いましょう。間違えても大丈夫 — Gitはほぼ全ての操作を元に戻せます。