はじめに
git stash は、Git で作業中の変更を一時的に退避させるためのコマンドです。これにより、現在の作業内容を保存してワーキングディレクトリをクリーンな状態に戻し、別の作業やブランチへの切り替えをスムーズに行うことができます。
主な用途
- 一時的な保存: コードに変更がある状態で別のブランチに切り替える必要がある場合、変更をコミットせずに作業を中断したいことがあります。このとき、git stash を使うことで、変更を一時的に保存できます。
- クリーンな状態で他の作業を行う: 現在の変更を一時的に退避させ、クリーンなワーキングディレクトリで新しい作業を始めることができます。
基本的な使い方
1. 変更を一時的に退避する
まず、現在の変更を stash に退避させます。
git stash
これにより、すべての未コミットの変更が一時的に保存され、ワーキングディレクトリが元の状態に戻ります。
2. 退避した変更を確認する
git stash list を使用して、退避した変更の一覧を確認できます。
git stash list
例として、以下のような出力が得られます:
$ git stash list
stash@{0}: WIP on feature-branch: 1234567 Add new feature
stash@{1}: WIP on master: 89abcde Fix bug in production code
stash@{2}: WIP on develop: 456defg Implement new logging system
解説
- stash@{0}, stash@{1}, stash@{2}: これらは各スタッシュの識別子です。stash@{0}が最も新しいスタッシュで、数字が増えるにつれて古いスタッシュになります
- WIP on feature-branch: これはスタッシュが作成されたときに作業していたブランチ名を示します。WIPは"Work In Progress"の略で、作業中の状態を示しています
- 1234567 Add new feature: これは、その時点での最新コミットのハッシュと、そのコミットのメッセージの一部です
このような出力から、どのスタッシュにどの作業が保存されているかを確認することができます。
3. 退避した変更を適用する
退避した変更をワーキングディレクトリに戻すには、次のコマンドを使用します。
git stash apply
これにより、最新の stash が適用され、ワーキングディレクトリに変更が戻ります。
4. 特定の stash を適用する
特定の stash を適用したい場合は、stash ID を指定します。
git stash apply stash@{0}
これにより、stash@{0}(特定の stash ID)を適用できます。
5. 退避した変更を削除する
適用後に不要となった stash を削除するには、次のコマンドを使用します。
git stash drop
これにより、最新の stash を削除します。
6. 退避した変更を適用して削除する
git stash apply と git stash drop を組み合わせて、適用と削除を一度に行うこともできます。
git stash pop
これにより、最新の stash を適用した後、その stash を削除します。
git stash applyとの違い
- git stash apply は、stash を適用した後もその stash をリストに残しておく場合に使用します。リストに残るため、後で再適用することもできます
- git stash pop は、stash を適用した後に自動的にリストから削除したい場合に使用します。通常、一度適用すればもう不要な stash を簡単に削除できるため、これが便利です
まとめ
git stash は、作業を中断して別のタスクに移る際や、クリーンな状態で作業を続けたいときに非常に役立つツールです。これをうまく活用することで、作業効率を高め、柔軟に開発を進めることができます。