git stashコマンドは、現在の作業ディレクトリの変更を一時的に退避させ、作業内容を一時的に保存(スタッシュ)するためのGitの機能です。この機能を使うことで、現在の変更内容をコミットせずに、別のブランチへ切り替えたり、他の作業を行ったりすることができます。
以下では、git stashの基本的な使い方と、スタッシュの管理方法について説明します。
#git stashの基本的な使い方
1. 作業内容をスタッシュに退避する
現在の作業内容を一時的に退避させるには、以下のコマンドを使用します。
git stash
このコマンドを実行すると、ワークツリーのすべての変更(追跡されているファイルと未追跡のファイル)をスタッシュに保存し、作業ディレクトリは直前のコミットの状態に戻ります。
- コマンドオプション:
git stash save "メッセージ": スタッシュにメッセージを追加して、後からわかりやすくします。git stash --include-untrackedまたはgit stash -u: 未追跡のファイルもスタッシュに含めます。
2. スタッシュした内容を確認する
スタッシュした内容の一覧を確認するには、以下のコマンドを使用します。
git stash list
このコマンドは、スタッシュの内容を一覧表示します。それぞれのスタッシュには、stash@{n}という形式の識別子が付与され、nはスタッシュの番号を示します。
3. スタッシュした変更を再適用する
保存したスタッシュを再度作業ディレクトリに適用するには、以下のコマンドを使用します。
git stash apply
このコマンドは、最新のスタッシュ(stash@{0})を作業ディレクトリに再適用します。
-
特定のスタッシュを適用する: 特定のスタッシュを再適用する場合は、スタッシュIDを指定します。
git stash apply stash@{2}
4. スタッシュの削除
スタッシュした内容が不要になった場合は、以下のコマンドで削除します。
-
最新のスタッシュを削除:
git stash drop -
特定のスタッシュを削除:
git stash drop stash@{2} -
すべてのスタッシュを削除:
git stash clear
5. スタッシュを適用して削除する
スタッシュを適用すると同時に、スタッシュのリストから削除したい場合は、以下のコマンドを使用します。
git stash pop
このコマンドは、git stash applyとgit stash dropを組み合わせたもので、スタッシュを再適用した後、自動的にスタッシュを削除します。
6. スタッシュを新しいブランチに適用する
新しいブランチを作成し、スタッシュをそのブランチに適用する場合は、以下のコマンドを使用します。
git stash branch <new-branch-name>
このコマンドは、新しいブランチを作成し、最新のスタッシュをそのブランチに適用してから、スタッシュを削除します。
例: git stash の使用例
-
現在の作業内容をスタッシュに退避
git stash save "WIP: 作業中の変更を一時保存" -
ブランチを切り替える
git checkout feature/new-feature -
元のブランチに戻り、スタッシュを再適用
git checkout main git stash apply -
スタッシュが不要になったら削除
git stash drop
#git stashの注意点
- 未追跡ファイルに注意: デフォルトでは、
git stashは追跡されているファイルのみをスタッシュに保存します。未追跡のファイルも含めたい場合は、uオプションを使う必要があります。 - スタッシュの競合: スタッシュを再適用するときに、作業ディレクトリの状態と競合が発生する場合があります。競合を解消する必要があります。
- スタッシュはあくまで一時的な保存:
git stashは、変更を一時的に保存するためのものであり、長期間保持するためのものではありません。必要な変更は早めにコミットするようにしましょう。
#まとめ
git stashは、現在の作業内容を一時的に退避させるための強力なツールで、ブランチの切り替えや他の作業を行う際に非常に便利です。適切に使用することで、作業を中断せずに柔軟に対応できます。スタッシュの管理方法を理解し、必要に応じて効率的に活用しましょう。