gitには、今作業中なんだけどすぐに別の作業したくなって一時的に変更を退避させたいんだよねーという時に使える git stash
という便利コマンドがあります。
gitを使い始めて6年ぐらいの先日、stashに名前をつけられることを知りました (厳密には名前じゃあくてメッセージをつける機能ですけど、名前みたいなもんなんで名前って呼びます)。
gitもう6年ぐらい使ってるけど、はじめて使った / “git stash に名前をつける - webネタ” (1 user) https://t.co/7VeuYQlr2k
— 寝具突撃部隊 寝無理隊 (@pinkumohikan) September 11, 2018
git stashの構文
git stash save [--patch] [-k|--[no-]keep-index] [-q|--quiet] [-u|--include-untracked] [-a|--all] [<message>]
使ってみる
前提
$ git status On branch master Your branch is up-to-date with 'origin/master'. Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: README.md no changes added to commit (use "git add" and/or "git commit -a")
何も考えずstashすると...
$ git stash Savd working directory and index state WIP on master: xxxxxxx いい感じの直前コミットのメッセージ $ git status On branch master Your branch is up-to-date with 'origin/maser'. nothing to commit, working tree clean
と変更の退避はできるものの、stashには「branch名」と「直前コミットのメッセージ」しか表示されないので時間が空いてからstash listを眺めるとそのstashが何を示すものかもうのわかりません。
$ git stash list stash@{0}: WIP on master: xxxxxxx いい感じの直前コミットのメッセージ
僕もそうやっていくつものstashで 「良く分からんからgit stash pop😲 -> ガリガリにコンフリクト😱 -> これもう要らんやつや...😂」 みたいな悲劇を起こしました。
だがしかし! stashに名前をつけることが出来ると、ほらこの通り!
$ git stash save "俺が考えた最強のREADME" Saved working directory and index state On master: 俺が考えた最強のREADME
$ git stash list stash@{0}: On master: 俺が考えた最強のREADME
そのstashが「俺が考えた最強のREADME (wip)」であることがひと目で分かります!便利!