git stash pop と git stash apply の使い分け
git stash pop と git stash apply の違い
git stash pop と git stash apply は、どちらも Git の stash 機能を使用して、現在の作業中の変更を一時的に保存し、後で復元するためのコマンドです。しかし、それらの動作は微妙に異なります。
git stash pop
- 一時保存した変更を適用し、stash を削除します。
- 現在の作業中の変更を stash に保存した後、最後に保存された stash を取り出し、現在のブランチに適用します。
- stash が削除されるため、再度適用することはできません。
- stash は残っているため、必要に応じて再度適用することができます。
- git stash pop は、一時保存した変更を適用し、stash を削除するワンステップ操作です。
- git stash apply は、一時保存した変更を適用しますが、stash を残すため、後で再度適用することができます。
使用例
- 一時保存した変更を適用し、stash を削除する:
git stash pop
注意:
- stash は、一時的な保存場所です。重要な変更を保存する場合は、コミットすることを推奨します。
- stash の管理が複雑になるのを防ぐために、定期的に stash を削除してください。
例 1: 新しい機能開発中に一時保存
シナリオ:
- 新しい機能を開発している最中に、緊急のバグ修正が必要になった。
- 現在の作業を一時的に保存して、バグ修正に取り組みたい。
コード:
# 現在の作業をstashに保存
git stash save "緊急バグ修正のため一時保存"
# バグ修正を行う
# ...
# バグ修正が完了したら、stashをポップして元の作業に戻す
git stash pop
例 2: 複数のstashを管理
- 複数の機能開発を並行して進めており、それぞれを一時保存したい。
# 機能Aの作業をstashに保存
git stash save "機能Aの作業"
# 機能Bの作業をstashに保存
git stash save "機能Bの作業"
# 機能Aの作業に戻す
git stash apply stash@{0}
# 機能Aの作業を削除
git stash drop stash@{0}
例 3: stashのリスト表示と選択
- 複数のstashが保存されており、どのstashを適用するか確認したい。
# stashのリストを表示
git stash list
# 最後のstashを適用
git stash apply stash@{0}
git stash の使い分け
- 一時的な作業保存: 緊急のバグ修正や、他の作業に切り替える必要がある場合に、現在の作業を一時的に保存する。
- 複数の機能開発: 複数の機能を並行して開発する場合、それぞれの作業を個別のstashに保存することで管理を容易にする。
- 作業の復元: 誤って変更を加えてしまった場合や、過去の作業に戻りたい場合に、stashから該当の作業を復元する。
- stashのリスト表示や選択には、
git stash list
コマンドを使用します。
コミットして後でブランチを切り替える:
- 利点:
- 作業の保存がより明確になります。
- ブランチを切り替えることで、異なる作業を分離できます。
- 方法:
- 現在の作業をコミットします。
- 新しいブランチを作成し、そのブランチでバグ修正や他の作業を行います。
- バグ修正が完了したら、元のブランチに戻ります。
作業ツリーを一時的に保存する:
- 利点:
- 方法:
git worktree add <branch-name>
コマンドを使用して、新しい作業ツリーを作成します。- 新しい作業ツリーでバグ修正や他の作業を行います。
- 作業が完了したら、元の作業ツリーに戻ります。
サブモジュールを使用する:
- 利点:
- 方法:
- プロジェクトにサブモジュールを追加します。
- サブモジュールで独立した作業を行います。
- サブモジュールの変更をメインプロジェクトに統合します。
- 複数の機能開発: 複数の機能を並行して開発する場合、git stashを使用してそれぞれの作業を管理できます。
- コミットは、プロジェクトの履歴を管理する重要な手段です。適切なタイミングでコミットを行い、プロジェクトの進捗を記録しましょう。
- サブモジュールは、プロジェクトの構造を複雑にする可能性があります。適切な使用を心がけましょう。
git git-stash