Git & GitHub 完全ガイド

ゼロからプロフェッショナルまで。初心者にもわかりやすい実践的なGit入門ガイドです。

初級 - 個人開発 中級 - チーム開発 上級 - プロダクション

クイックスタート(5分で始める)

初めてのGit?ここから始めましょう!

難しいことは後から覚えれば大丈夫。まずはこの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 add) (git commit) ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ ファイル │ │ ファイル │ │ ファイル │ │ (変更済み) │──→│ (準備完了) │──→│ (保存済み) │ └─────────────┘ └─────────────┘ └─────────────┘

作業ディレクトリ

ファイルを実際に編集する場所。まだ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
マージ前: A---B---C main \ D---E feature マージ後: A---B---C---F main \ / D---E feature F = マージコミット

マージコンフリクト(衝突)の解決

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の作成手順

  1. フィーチャーブランチで作業してプッシュ
  2. GitHubで「Compare & pull request」をクリック
  3. タイトルと説明を書く
  4. レビュアーを指定
  5. レビュー後にマージ

.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貢献

チートシート

毎日使うコマンド

git status状態確認
git add .全てステージ
git commit -m "msg"コミット
git pushアップロード
git pullダウンロード
git log --oneline履歴確認

ブランチ操作

git branch一覧表示
git switch -c name作成&切替
git switch name切り替え
git merge nameマージ
git branch -d name削除

取り消し・復元

git restore file変更破棄
git restore --staged fileステージ解除
git reset --soft HEAD~1コミット戻す
git revert hash安全に取消
git stash / git stash pop一時退避

リモート操作

git clone urlリポジトリ複製
git remote -vリモート確認
git fetch変更確認のみ
git push -u origin br初回プッシュ

毎日のワークフロー

┌─────────────────────────────────────────────────┐ │ 毎日の Git ワークフロー │ ├─────────────────────────────────────────────────┤ │ 朝: git pull origin main │ │ 作成: git switch -c feature/name │ │ 作業: (ファイルを編集) │ │ 確認: git status │ │ 追加: git add . │ │ 保存: git commit -m "メッセージ" │ │ 送信: git push │ │ 依頼: GitHubでPRを作成 │ │ 完了: レビュー後にマージ │ │ 掃除: git branch -d feature/name │ └─────────────────────────────────────────────────┘

よくある間違いと対処法

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はほぼ全ての操作を元に戻せます。