はじめに
gitで複数の機能を並行して開発する時などブランチを頻繁に切り替えることはあるかと思います。
gitでは git checkout -
, git rebase -
のように -
を前のブランチのエイリアスとして使うことができますが、
三つ以上のブランチを行き来したりする際には使えません。
そこでgitで直近checkoutしたbranchを表示する git recent-branch
というgitのサブコマンドを作成しました。
$ git recent-branch
develop (16 seconds ago) Fri May 12 00:06:52 JST 2017
feature/hogehoge (28 seconds ago) Fri May 12 00:06:40 JST 2017
feature/test2 (41 seconds ago) Fri May 12 00:06:27 JST 2017
master (57 seconds ago) Fri May 12 00:06:11 JST 2017
feature/test (2 minutes ago) Fri May 12 00:05:02 JST 2017
ae8bcd440123ee5db3fa994eb618f918a857ed5b (1 week ago) Tue May 2 21:54:36 JST 2017
これと peco を組み合わせることで、直近checkoutしたブランチを楽に行き来することができます。
デモ
Tips殴り書き
内部の挙動
git の操作ログはgit管理下のディレクトリにある .git/logs/HEAD
に保持されています。
これをパースしてcheckoutのログを拾ってきて整形して表示するだけと非常にシンプルな作りになっています。
git reflog
コマンドもこいつを利用しているようです。
git のサブコマンドの作り方
知らなかったのですが、gitは git-recent-branch
のようなコマンドを用意してあげれば、
git recent-branch
と実行した時にハイフンで区切られているコマンドを実行してくれるようです。
これでサブコマンドのような振る舞いをさせることができます。
GolangでTwitterライクな時間表示
GolangでTwitterライクな表示(7 hours ago のような)をさせる際に以下のパッケージが便利でした。
相対的な時間表示以外にもファイルサイズなど、自前で実装するのもめんどくさい便利な変換をしてくれます。
fmt.Printf("This was touched %s.", humanize.Time(someTimeInstance)) // This was touched 7 hours ago.
dustin/go-humanize: Go Humans! (formatters for units to human friendly sizes)
まとめ
-
git recent-branch
というコマンドを作成しました。 - gitのサブコマンド簡単に作れるよ。
- go-humanize 便利。
作ってから数週間経ちますが、これでブランチの切り替えのストレスが解消されました。
今ではこれがない生活は考えられません。
ぜひ試してみてください。