ブランチの進捗どうですか。
Gistからどうぞ https://gist.github.com/unarist/bd912e7c6024c9ade792
実行例
$ git-branch-stats.sh
feature/a merged =origin
feature/b +5-2 commits >origin/feature-b
my_local_branch +1-0 commits =???
master =origin
- masterとのマージ起点を割り出して、そこから双方で進んだコミットの数を表示
- マージ済みならその旨を表示
- upstreamのrefspecを表示(remote以外同じなら省略)
- upstreamと比較して(=|<|>|<>)を表示
実装周り
upstream周りはgit for-each-ref
任せ。
git rev-list
は「コミットAから辿れる&&コミットBから辿れない&&...」なコミットを列挙するコマンドでちょっとおもしろい。あまり複雑なことはできないようだけど。
ahead/behindは行数版も実装したものの、個人的にコミット数の方が見たかったのでコメントアウト。
今後の課題
- マージ済みのブランチにマージ日時とか表示したい
- rev-listを使うなら、ブランチがマージコミットを指しているのか、マージ直前のコミットを指しているのかで処理が変わるような
- マージ起点じゃなくてブランチを作った時点からのdiffがいい?(可能なのかわからないけど)
- merge-baseに--fork-pointという操作があるけど、reflogを見るようなので多分ここでは使えない
- マージする方向が適当でもうまく動くのだろうか
- わかりにくい
- upstreamが消えると
<>
と表示される(masterと比較している・・・?) -
+2-1
じゃなくて[ahead 2, behind -1]
とか
- upstreamが消えると
参考
StackOverflowであたりをつけてmanを読み込むいつもの流れ。