Git WEB開発

[Git]開発中に別の作業をスムーズに行う方法[git stash]

※本サイトはPR表記を含みます。

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は他にも便利な機能がたくさんあります。

最低限の使い方を覚えるのは必須(クローンしてー、ブランチきってー、チェックアウトしてー、コミットしてー、プッシュしてーなどありきたりな流れ)ですが、ちょっと毛の生えた使い方を覚えるだけで、作業効率が上がるので、ぜひ覚えましょうー!

-Git, WEB開発
-