はじめに
Gitを使った開発において、作業途中でブランチを切り替えたり、急な修正対応が必要になったりすることはよくありますよね。そんなときに便利なのがgit stash
コマンドです。
多くの開発者がgit stash
とgit stash pop
の基本的な使い方は知っていますが、実は複数のstashを管理して、特定のものだけを選んでpopすることができることをご存知でしょうか?
本記事では、Git stashの基本から応用まで、実際のコマンド例とともに詳しく解説します。
Git stashの基本的な使い方
stashとは?
stashは、現在の作業ディレクトリとインデックスの変更を一時的に保存する機能です。コミットせずに作業内容を退避させることができます。
基本コマンド
# 現在の変更をstashに保存
git stash
# stashした内容を復元(最新のstashを取得して削除)
git stash pop
複数のstashを管理する方法
stash一覧の確認
複数の作業を並行して進めていると、stashも複数たまることがあります。
# stash一覧を表示
git stash list
実行結果の例:
stash@{0}: WIP on feature/user-auth: a1b2c3d ユーザー認証機能の実装中
stash@{1}: WIP on feature/payment: e4f5g6h 決済機能のバグ修正
stash@{2}: WIP on hotfix/login-error: i7j8k9l ログインエラーの緊急修正
特定のstashをpopする
ここがポイントです!git stash pop
に番号を指定することで、特定のstashを選んで復元できます。
# 特定のstashを復元(stash@{1}を復元)
git stash pop stash@{1}
# または短縮形で
git stash pop 1
実践的なワークフロー例
シナリオ:複数の機能を並行開発中
- 機能Aを開発中に緊急バグ修正が発生
# 現在の作業をstash
git stash push -m "機能A:ユーザー登録フォームの実装途中"
# 緊急修正用ブランチに切り替え
git checkout hotfix/critical-bug
- 緊急修正完了後、別の機能Bも開始
# 機能Bの作業をstash
git stash push -m "機能B:データベース最適化の調査"
- stash一覧を確認
git stash list
# stash@{0}: 機能B:データベース最適化の調査
# stash@{1}: 機能A:ユーザー登録フォームの実装途中
- 機能Aの作業を再開
# 特定のstash(機能A)を復元
git stash pop stash@{1}
便利なstashオプション
メッセージ付きでstash
# 分かりやすいメッセージをつけてstash
git stash push -m "ログイン機能のリファクタリング途中"
特定のファイルのみstash
# 特定のファイルだけstash
git stash push -m "設定ファイルのみ退避" config/settings.js
stashの内容を確認
# stashの詳細を確認
git stash show stash@{0}
# 差分を表示
git stash show -p stash@{1}
stashとpopの違いを理解する
git stash pop vs git stash apply
-
git stash pop
:stashを復元して、stash一覧から削除 -
git stash apply
:stashを復元するが、stash一覧には残す
# stashを復元して削除
git stash pop stash@{1}
# stashを復元するが残しておく
git stash apply stash@{1}
トラブルシューティング
コンフリクトが発生した場合
stash popでコンフリクトが発生した場合の対処法:
# コンフリクトを手動で解決後
git add .
git stash drop stash@{0} # 該当のstashを削除
不要なstashの削除
# 特定のstashを削除
git stash drop stash@{2}
# 全てのstashを削除
git stash clear
まとめ
Git stashは単純にgit stash
とgit stash pop
を使うだけでなく、以下のような使い分けができます:
- **
git stash list
**で複数のstashを管理 - **
git stash pop stash@{番号}
**で特定のstashを選んで復元 - **
git stash push -m "メッセージ"
**で分かりやすい管理
これらの機能を活用することで、複数の作業を効率的に並行して進められるようになります。特に、チーム開発や複数の機能を同時に開発している場合には非常に重宝する機能です。
ぜひ明日からの開発で活用してみてください!