Git の stash コマンドについてメモ

作業ツリーの内容を一時的に保存することができる git stash コマンドについての備忘録。

git stash

環境

  • git version 2.37.3

使い方

作業ツリーの状況。

$ git status
On branch test1
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   a.txt

no changes added to commit (use "git add" and/or "git commit -a")

stash 領域に保存。-a オプションで、untracked file.gitignore で無視されているファイルも併せて保存されます。-m オプションでメッセージを付与できます。

$ git stash -a -m "WIP on test1"
Saved working directory and index state On test1: WIP on test1

保存されている stash 情報を確認。

$ git stash list
stash@{0}: On test1: WIP on test1

stash 情報の中身を確認。

$ git stash show stash@{0} 
 a.txt | 1 +
 1 file changed, 1 insertion(+)

git stash apply コマンドで、現在のブランチの作業ツリーに保存された stash 情報を戻せます。戻せるブランチは、stash の保存をしたブランチに限らず、異なるブランチへも戻すことができます。

$ git stash apply stash@{0} 
On branch test1
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   a.txt

no changes added to commit (use "git add" and/or "git commit -a")

stash 情報は残ったままとなる。

$ git stash list
stash@{0}: On test1: WIP on test1

stash 情報を削除。

$ git stash drop stash@{0} 
Dropped stash@{0} (47b7f2dfb27cb332737f3e14aee5e36182308a56)

削除されました。

$ git stash list

なお、stash 情報を戻す際、git stash apply ではなく git stash pop コマンドを利用すると、元に戻す際に一緒に stash 情報の削除もしてくれます。