gitで以前からアップデートされた変更のdiffをすべてみる

svnsvkをつかっていて今まで一番不満だったのは、

$ svn update

などをしたときに、リビジョンがいくつになったというのは表示されるのだけど、アップデートする前にsvn infoを打たないとアップデートする前はどのリビジョンだったかわからなくなってしまうことだった。また、仮にsvn infoなどでリビジョン番号を事前にメモっておいてもまたそれをdiffを見るときに指定したりしないといけなかったりしてなかなかめんどくさかった( ひょっとすると何かうまいやりかたがあるのかもしれないけど )

ついこの前gitのドキュメントを漁っていたらReflogという仕組みをみつけて、これは非常に便利だと思ったので紹介する。

gitはツリーの状態が更新されると、その履歴を保持しておいてくれるらしい。

ツリーがいつ更新されるかというと、コミットしたときや、rebaseやmergeなどをしたときなどである。

reflogはbranch名@{reflog表現}のように書くことができ、gitのコミットのSHA1などを渡すところにならたいてい指定できる。

HEAD@{1}なら、今いるブランチの1つ前の状態のオブジェクトのSHA1を差している。


なので、何か日々更新をチェックしたりしているリポジトリがあり、

$ git remote update
$ git rebase origin/master
$ git whatchanged -p HEAD@{1}..HEAD

のようにすると、前回アップデートしたときからの差分のdiffをまとめて見ることができるのだ。

ということで、

http://git.coderepos.org/cgi-bin/gitweb.cgi?p=share/dotfiles/etc.git;a=commitdiff;h=aa1a38db93075e1d00d46c5ccff140d88867c66f;hp=231730481136c1f9cac9f7823b4794c228614483

のようにしてgit newで前回アップデートしたところからのdiffを眺められるのように設定してる。