WEB開発業務中に、作業が割り込んでくることはよくあるケースと思います。
現在はGit(バージョン管理システムの一つ)がより広く普及し、うまく使えば、「スムーズに作業を中断して、別作業をし、そして、また元の作業に戻る」といったことが簡単に行えます。
今回は、それを可能にしてくれる Gitの「git stash
」コマンドを紹介します。
開発途中に別の作業が入る時
割り込み作業の例としては、開発をしている最中に出したプルリクの修正作業が入ったり、すぐに別のブランチに切り替えて確認作業を行いたい。など、業務中は色々なケースがあると思います。
現ブランチでファイルに変更を加えている状況では、git checkout
で別ブランチに移動することは特定の条件以外ではできません。すぐにアクションをとりたい?のに、身動きをとれない経験がある人も多いのではないでしょうか?
そこで、git stashコマンドの出番です。
ブランチを切り替えるために、作業途中でもとりあえずコミットをして、変更履歴を綺麗にした状態(git status
でクリーンな状態)で別ブランチに移ったりする必要はもうありません。
git stash save
まず、開発作業を途中で中断するために、バージョン管理下ディレクトリで git stash save
コマンドを打ちましょう。
command
git stash save
これで、現時点での変更されているファイル内容を全て保存してくれます。(※既にコミットしたものは対象外)
複数ファイルであろうと、何せ、変更検知があるファイル全て保存してくれる便利なやつです。
※git stash save
で保存された後は、現在変更がなかったように振る舞うこともポイントです。これでブランチを切り替えたり、自由に別の作業ができる状態になります。git status
で確認してみてください。変更がないという形が確認できる(クリーンだよ!と言ってくれる)はずです。
git stash list
git stash save
し、変更をひとまとめにしたファイル群は、以下のコマンドで確認できます。
command
git stash list
各stashごとを以下のようにリスト群で確認できるので、どの番号のものが自分の目的のリストなのか判断がつきます。
list
stash@{0}: WIP on main: 5002d49 our new homepage3
stash@{1}: WIP on main: 5002d48 our new homepage2
stash@{2}: WIP on main: 5002d47 our new homepage1
最新のものは常に「0」になります。ブランチ名や最新コミットメッセージも確認できるので、判別も簡単です。
まずは、git stash list
でスタッシュの状態を確認後に作業をするようにすれば、意図しない作業も減らせるかと思います。
git stash apply
「別作業を完了後、元の作業に戻りたい時」は、git stash apply
の出番です。
command
git stash apply stash@{0}
呼び出すstash@{ID}を指定すれば、その作業内容を呼び出すことができます。
※スタッシュを呼び出す前に必ず「変更内容を呼び出したい対象のブランチになっているか」を気を付けるようにしましょう。(git checkout 対象ブランチ
を実行しておく)
上記のコマンドは、例として、以下のstashを呼び出しました。
呼び出したstash
stash@{0}: WIP on main: 5002d49 our new homepage3
applyされた変更内容は現ブランチを対象としているので、逆に言えば、「違うブランチで変更保存を行ったけども、現在のブランチでその変更内容を全て取り入れたい」といったこともできますね。(あんまりないケースやけど)
git stash drop
dropっていうだけに、不要になった作業内容は削除してくれます。不要になったスタッシュはお掃除しておきましょう。
command
git stash drop stash@{2}
git stash
は便利な反面、ゴミが溜まりやすい状況になる?と思われるので、定期的に削除しておくことをオススメします。
僕の場合、stashを呼び出した後、作業区切りでコミットしてプルリク出して、という流れになるので、プルリクを出した時点で、stashが再度必要になるケースはほぼありません。なので、そのタイミングで削除しています。(どれがどれかようわからんようになるのは本当に良くない)
補足 - Untracked files: (未追跡ファイル)が出る場合
注意点としてgit status
などで、Untracked files: が出る場合、新たに追加したファイルの可能性が高いです。git stash save
は、あくまで「追跡できる変更ファイル」に限られます。
そのような場合、必ず「git add
」でファイルを追加して、コミットしてください。(git がファイルの履歴変更追跡ができる状態にする)その後の変更に関しては、git stashで管理することが可能になります。
最後に
コマンドを1つ覚える(オプションは4つ)だけで、作業が捗ります。まだgit stash
を使いこなせていない人は勿体無いです。gitは他にも便利な機能がたくさんあります。
最低限の使い方を覚えるのは必須(クローンしてー、ブランチきってー、チェックアウトしてー、コミットしてー、プッシュしてーなどありきたりな流れ)ですが、ちょっと毛の生えた使い方を覚えるだけで、作業効率が上がるので、ぜひ覚えましょうー!