【git stash】コミットせずに作業を中断(保持)したい
はじめに
こんにちは。
2022年に新卒入社しました、ishiyamaです。
日々の業務で、
「突然別の作業が入ってしまった」
「でもコミットするほどキリのいい進捗じゃない…」
みたいなこと、ありませんか。
そんな時に試して欲しいのが git stash です。
git stash とは
stash は git の機能の一つで、ローカルの変更を一時退避するというものです。
本記事では、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サイト・システムの
お悩みがある方は
お気軽にご相談ください
出張またはWeb会議にて、貴社Webサイトの改善すべき点や
ご相談事項に無料で回答いたします。