この記事を書いた2013年当初の
git
(version 1.8)から月日は流れ、いまどきのgit
(version 2.7以降) は、--sort
オプションがあるのでそれを使うのがよいでしょう。というわけでこれを追記しておきます。
git branch --sort=<key>
-
--sort
オプションのkey
を指定するだけになりました。 (version 2.7.0以降) - 使える
key
は git-for-each-ref のそれと同じなので、日付順にソートしたいときには、authordate
,committerdate
などが指定可能です。 - 同じようにタグのリストも
git tag --sort=taggerdate
のようにタグ付け日時順に並び替えられます。
--sort
オプションやkey
の詳細については以下を参照してください。
追記はここまで 2017/3/22
以下は 2013/08/28 の記事 (git version 1.8.2 で検証)
gitのブランチ一覧といえば
-
git branch
ローカルブランチ一覧 -
git branch -r
リモートブランチ一覧 -
git branch -a
ローカルとリモートのブランチ一覧
とするのですが、アルファベット順にソートされて表示されてしまいます。
ちょっとした作業でテキトーに作ってしまったブランチがいつ頃作られたり使われたりしたのか知りたくなることがあります。
ブランチ名に日付や時間でもつけていればよいのでが、まあテキトーに作ってるときはそんなことも忘れてhogehogeとか適当に済ませてしまうのはよくあることです。ここでは主にローカル作業中に量産してしまった謎ブランチをなんとなく鮮度順に並べてみる方法について書いてみます。
git reflog
git reflog
を使えばチェックアウトやマージの変遷がざっとわかります。
どのブランチからどのブランチへチェックアウトしたかもわかるので、記憶を辿るのにも役に立つでしょう。
git log -g --abbrev-commit --pretty=oneline
と同等です。
git for-each-ref
git for-each-ref
というコマンドはobjectsize, authordate, committerdate, taggerdateなどでソートすることができます。ソートのキーには複数指定できますし、出力フォーマットもある程度カスタマイズできます。
例えばローカルブランチをcommiterdateの新しい順に上から表示するには
git for-each-ref --sort='-*committerdate' --format="%(refname:short)" refs/heads/
さらに詳しくはgit help for-each-ref
参照してください。
ls .git/refs/head
単にgit branch hogehoge
みたく作りっぱなしのまま、何もコミットしなかったブランチについていつ頃のものだったか知りたいときにgit reflog
やgit for-each-ref
ではちょっとうまくいきません。
そんなときは
ls -t .git/refs/heads
-t
オプションで更新時間順にソート。ls -lt
とかオプションはお好きなように。
コミットされたりするとブランチディレクトリのタイムスタンプが変わってしまうのでブランチ作成日ではないことに注意です。
リモートブランチのことについてはわかりませんし、また、git gc
すると.git/refs/heads以下が綺麗に掃除されてしまうのでls
しても何も出てきません。そのときはきっぱり諦めることです。
「ブランチ作成日時」はgitの関知するところではないので、どうしてもそれを管理したいという場合にはブランチ名にタイムスタンプをつける運用にするのがよさそうですが、それはそれで厄介事が増える(メインの作業ブランチと日付の新しさが必ずしも一致しない等による混乱)ものです。
結局コマンド調べまわってるうちに日が暮れたり夜が明けてしまったりしていて、自分は一体何を開発しているのか、人生とは一体何なのかと思い悩んでしまい、一体自分はここに何を書いているのかもわからなくなります。
鮮度順に並べることよりも、楽ちんなブランチ運用の方法を考えるのがマジオススメです。