【git stash】コミットせずに作業を中断(保持)したい

はじめに

こんにちは。
2022年に新卒入社しました、ishiyamaです。

日々の業務で、
突然別の作業が入ってしまった
でもコミットするほどキリのいい進捗じゃない…

みたいなこと、ありませんか。
そんな時に試して欲しいのが git stash です。

git stash とは

stashgit の機能の一つで、ローカルの変更を一時退避するというものです。
本記事では、stash の基本的な使い方を説明していきます。

現在の作業を退避する(stash save)

$ git stash save

Saved working directory and index state WIP on {ブランチ名}: {リビジョン} {最新コミットメッセージ}

↑これで、作業を一時退避(保持)できます。「save」は省略してもOKです。

untracked なファイルも退避する

$ git stash -u

Saved working directory and index state WIP on {ブランチ名}: {リビジョン} {最新コミットメッセージ}

-u オプションをつけて untracked なファイルを一緒に退避することも可能です。
-k オプションだと、untracked なファイルのみを退避できる)

退避した作業の一覧を確認する(stash list)

$ git stash list

stash@{0}: WIP on {ブランチ名}: {リビジョン} {最新コミットメッセージ}
stash@{1}: WIP on {ブランチ名}: {リビジョン} {最新コミットメッセージ}

↑こんな感じで、退避した作業に通し番号が振られたリストが見られます。
直近の退避した作業が stash@{0} として保存されます。
新しく stash を行うと、古い作業の通し番号が stash@{1}, stash@{2}, ... と変わるので注意しましょう。

退避した作業を復元する(stash apply/pop)

$ git stash apply stash stash@{0}

On branch {ブランチ名}
Changes to be committed:
 (use "git restore --staged <file>..." to unstage)
   new file:   hoge/hoge1.php
   new file:   hoge/hoge2.php

Changes not staged for commit:
 (use "git add/rm <file>..." to update what will be committed)
 (use "git restore <file>..." to discard changes in working directory)
   modified:   hoge/hoge3.php
   modified:   hoge/hoge4.php
   deleted:    hogehoge/tmp/hoge.png

Untracked files:
 (use "git add <file>..." to include in what will be committed)
   app/Http/Controllers/Hoge/FugaController.php
   app/Services/Hoge/HogeFugaService.php

↑これで復元ができました。apply/pop で引数を指定しない場合は、最新の作業(stash@{0})が復元されます。

apply と pop の違い

apply は復元後、一時退避した作業が残ります。上の例だと stash@{0} と stash@{1} の両方が残る形になります。
pop は復元後、一時退避した作業を削除します。上の例だと、復元していない方が stash@{0} として残る形ですね。 本記事の執筆者は
「間違った作業を復元しちゃった → その場でもう一度 stash
をやると通し番号が変わって混乱するので、apply を使いがちです。

一時退避した作業を削除する(stash drop)

$ git stash drop stash@{0}

Dropped stash@{0} ({リビジョン})

↑これで任意の作業を削除できます。
引数を指定しないと最新の作業(stash@{0})を削除してしまうので、削除対象を誤らないよう注意が必要です。

$ git stash clean  

また、clean を使うことで溜まった退避作業を一気に削除することができます。
一通り作業が片付いたら綺麗にしておくのがいいですね。

おわりに

今回は git stash の基本的な使い方について触れてみました。
何かと便利なので、この記事を読んで「こんなのもあるんだな〜使ってみるか〜」と思っていただけたら嬉しいです。

Webサイト・システムの
お悩みがある方は
お気軽にご相談ください

お問い合わせ 03-6380-6022(平日09:30~18:30)

出張またはWeb会議にて、貴社Webサイトの改善すべき点や
ご相談事項に無料で回答いたします。

無料相談・サイト診断 を詳しく見る

多くのお客様が気になる情報をまとめました、
こちらもご覧ください。