gitで現在の作業内容をクイックセーブする

見えないチカラ: 【翻訳】Gitをボトムアップから理解する
http://keijinsonyaban.blogspot.jp/2011/05/git.html

最後の方にstashの話が書かれていた。
以下、引用。

これはあなたのディレクトリの内容の全て――ワーキングツリーと、index の状態の両方を含む――を取り込み、それらのための blob を Git のリポジトリ中に作成する。tree はそれらの blob を保持し、そして stash コミットはワーキングツリーと index と、あなたが stash をした時の時刻を記録する。


これは良いプラクティスだ。なぜなら、次の日にあなたは git stash apply を使って stash から変更を戻すことになるが、毎日の終わりにはあなたが stash した全ての変更が reflog に存在するからだ。以下は、次の日の朝に作業をするために戻ってきたあと、あなたがやるはずのことだ (WIP はここでは "Work in progress=進行中" を表す):

作業途中の内容をstashに放り込んで、blobを作っておくのは便利そうなので、サブコマンドにしておいた

git-qsave

このファイルに実行権限をつけて、PATHの通っている所に置くと使えるようになる。
インデックスの内容を維持するようにしてあるので、気楽にqsaveできるようにしてある。

使い方

とりあえず、作業してて保存したくなったら $ git qsave しておく。

昔の変更を取り戻したくなったら、下のような方法で探す事ができる。

  • stash一覧から探す
$ git stash list
  • reflogから探す
$ git reflog show stash
  • 詳しくログやコミット内容を見てみる
$ git log stash@{32} # これはいつやった?
$ git show stash@{32} # これはどんな内容?
  • 探したコミットからブランチを作る
$ git branch restore_stash32 stash@{32}


gitに慣れてなくて、コミット回数が少ない人は1日の終わりにとりあえずqsaveするようにしてみたら便利かも。