メインコンテンツへスキップ
レッスン 7 / 15推定時間: 20

スタッシュ(git stash)

作業中の変更を一時的に保存し、クリーンな状態に戻す方法を学びましょう

このレッスンの学習目標

  • stashの概念と使用場面を理解する
  • 基本的なstash操作をマスターする
  • 複数のstashを効率的に管理できる

スタッシュとは?

スタッシュ(stash)は、現在の作業中の変更を一時的に保存する機能です。コミットせずに変更を退避させ、後で復元できます。

こんな時に便利

🚨 緊急の作業が発生

  • 「機能開発中に緊急のバグ修正依頼が来た」
  • 「今の変更をコミットするには中途半端」
  • 「でもクリーンな状態で作業したい」

🔄 ブランチの切り替え

  • 「別のブランチを確認したいが、現在の変更を失いたくない」
  • 「コミットするほどではない実験的な変更」

🧪 一時的な実験

  • 「この変更を試したいが、元に戻せるようにしたい」
  • 「複数のアプローチを試して比較したい」

基本的な使い方

1. 変更を保存(stash)

# 現在の変更を保存
git stash

# メッセージ付きで保存
git stash save "作業中: ログイン機能の実装"

# 新規ファイルも含めて保存
git stash -u

# 無視ファイルも含めて保存
git stash -a

2. 保存した変更を確認

# stashリストを表示
git stash list

# 特定のstashの内容を確認
git stash show stash@{0}

# 詳細な差分を表示
git stash show -p stash@{0}

3. 変更を復元

# 最新のstashを適用(stashは残る)
git stash apply

# 特定のstashを適用
git stash apply stash@{2}

# 適用してstashから削除
git stash pop

# コンフリクトが発生した場合は手動で解決

4. stashの管理

# 特定のstashを削除
git stash drop stash@{1}

# すべてのstashを削除
git stash clear

# stashから新しいブランチを作成
git stash branch new-feature-branch stash@{0}

高度な使い方

部分的なstash

# 対話的に変更を選択してstash
git stash -p

# 特定のファイルだけstash
git stash push -m "一時保存" -- path/to/file.js

stashの内容を確認

# stashされたファイル一覧
git stash show --name-only stash@{0}

# stashの統計情報
git stash show --stat stash@{0}

よくある使用パターン

パターン1: 緊急対応

# 1. 作業中の変更を保存
git stash save "WIP: 機能開発中"

# 2. 緊急修正を実施
git checkout main
git pull origin main
# ... バグ修正 ...
git commit -m "fix: 緊急バグ修正"
git push origin main

# 3. 元の作業に戻る
git checkout feature/branch
git stash pop

パターン2: ブランチの確認

# 1. 現在の変更を保存
git stash

# 2. 他のブランチを確認
git checkout other-branch
# ... 確認作業 ...

# 3. 元に戻る
git checkout original-branch
git stash pop

パターン3: 実験的な変更

# 1. 実験1を保存
# ... 実験的なコード ...
git stash save "実験: アプローチ1"

# 2. 実験2を試す
# ... 別のアプローチ ...
git stash save "実験: アプローチ2"

# 3. 比較して選択
git stash list
git stash show -p stash@{0}  # アプローチ2を確認
git stash show -p stash@{1}  # アプローチ1を確認
git stash apply stash@{1}     # アプローチ1を採用

注意点とトラブルシューティング

1. stashの競合

# popでコンフリクトが発生した場合
git stash pop
# CONFLICT発生

# 手動で解決
# ... コンフリクト解決 ...
git add .

# stashはまだ残っているので削除
git stash drop

2. 間違えてstashを削除した場合

# reflogから復元を試みる
git fsck --no-reflog | grep commit
git show <found-hash>

3. どのstashか分からなくなった

# 各stashの作成時刻と内容を確認
git stash list --date=relative
for i in $(git stash list | cut -d: -f1); do
  echo "=== $i ==="
  git stash show -p $i | head -20
done

実践演習

CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log
CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log

stashのベストプラクティス

1. 分かりやすいメッセージを付ける

# ❌ 悪い例
git stash
git stash save "一時保存"

# ✅ 良い例
git stash save "WIP: ログイン検証ロジックの実装中"
git stash save "実験: 新しいAPIエンドポイントのテスト"

2. 定期的にstashを整理

# 古いstashを確認
git stash list --date=relative

# 不要なstashを削除
git stash clear  # 注意: すべて削除される

3. 重要な変更はブランチに

# stashが重要な変更になった場合
git stash branch feature/important-change stash@{0}

まとめ

git stashは、柔軟な作業フローを実現する強力なツールです。緊急対応や実験的な変更、ブランチ切り替えなど、様々な場面で活用できます。ただし、あくまで一時的な保存手段として使い、重要な変更は適切にコミットすることが大切です。

次のレッスンでは、外部リポジトリを管理する「サブモジュール」について学びます。

さらに学習を続けるには

素晴らしい学習ペースです!次のレッスンに進むには、無料会員登録をお願いします。無料会員では各コース3レッスンまで学習できます。

無料で続きを学ぶ

各コース3レッスンまで学習可能

学習進捗の自動保存

コース修了証明書の発行