はじめに
ある作業をしている時に何らかの理由で他の作業を先にやらなきゃいけない場合があります。しかし、まだ完了していない作業をcommitしたくはないですね。
- commitはしないけど、作業内容を保存しておきたい!
この時に、役に立つのがGit Stashです!
git stashとは
まだ終わっていない作業をスタックに保存するコマンドです。 これを通じてまだ完了していない作業をcommitせずに、後で再び取り出してきて作業を続けることができます。
git stashの対象ファイルは以下となります。
- ワーキングディレクトリで修正したファイル
- modifiedでありながら、Tracked状態のファイル
- Staging Areaにあるファイル
- Staged状態のファイル
※新しく作成したファイルはgit stashの対象ファイルになりません。git stashの対象としたい場合はそのファイルをStaging Areaにあげましょう。
git stash
作業していたことをスタックに保存するコマンドです。git stash
もしくは、git stash save
コマンドで実行できます。
# git stash ← 実行結果
Saved working directory and index state WIP on tmp_branch: ce54b7b tmp commit
これで作業を保存することはできます。しかし、保存するものが増えると何が何か分からなくなります。なので、各保存したスタックに自分が見たら分かるようなメッセージを書いておきましょう。
git stash -m [メッセージ]
もしくは、git stash save [メッセージ]
コマンドで実行できます。
# git stash -m 臨時メッセージ ← 実行結果
Saved working directory and index state WIP on tmp_branch: 臨時メッセージ
git pop
保存したスタックを取り出したい時に使うコマンドです。このコマンドを実行すると一番最近に保存した作業が取り出しされます(保存内容はスタックからなくなります)。最近のものではなく、特定の保存内容を取り出したい場合は、git pop [スタック番号]
コマンドを使えば可能です。
スタック番号は次のgit stash listコマンドで確認できます。
git stash list
git stashされている一覧を表示するコマンドです。
# git stash list ← 実行結果
stash@{0}: WIP on tmp_branch: メッセージ2
stash@{1}: WIP on tmp_branch: テスト
stash@{2}: WIP on tmp_branch: 臨時メッセージ
{}
に中にある番号がスタック番号となります。
git stash apply
git popと同じく保存内容を現在のワーキングディレクトリに適用するコマンドですが、保存内容はスタックからなくなりません。つまり、スタックを維持したまま、保存したスタックを使いたい時に良いものです。
このコマンドもgit stash apply [スタック番号]
で特定の保存内容を指定することができます。
git stash drop
スタックを削除するコマンドです。一番最近のものを1つ削除します。
git stash drop [スタック番号]
コマンドで特定のスタックを削除することができます。
git stash clear
全てのスタックを削除するコマンドです。全ての保存が要らなくなった場合使ったら良いでしょう。
最後に
git stashはコマンドも簡単で凄く便利です。私は他の作業をしたり、他のブランチに移動したい時に結構使っています。作業中、他の作業をする必要がある時にぜひ使ってみてください!