post Image
git recent-branchとpecoでブランチ切り替えを高速に行う

はじめに

gitで複数の機能を並行して開発する時などブランチを頻繁に切り替えることはあるかと思います。
gitでは git checkout -, git rebase - のように - を前のブランチのエイリアスとして使うことができますが、
三つ以上のブランチを行き来したりする際には使えません。

そこでgitで直近checkoutしたbranchを表示する git recent-branch というgitのサブコマンドを作成しました。

sachaos/git-recent-branch

$ 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したブランチを楽に行き来することができます。

デモ

asciicast.gif

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 便利。

作ってから数週間経ちますが、これでブランチの切り替えのストレスが解消されました。
今ではこれがない生活は考えられません。
ぜひ試してみてください。


『 Go 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。