created: 2023-10-04T03:57:47.601Z
ここ最近に自分がコミットをしたブランチを更新日時順で一覧する
複数のブランチにまたがって並行して作業していたり、ブランチからさらにブランチをきったりしていると、いまの作業で HEAD にあたる ref がどこにあるのかよくわからなくなったりする。自分が作業しているブランチを取得して、それも一番直近に作業したブランチがどれだかわかる形で一覧したい。
コマンド
$ git for-each-ref \
--no-merged origin/master \
--sort -committerdate \
--format="%(if:equals=$(git config user.name))%(authorname)%(then)%(committerdate:short) %(refname:short)%(else)%(end)" \
--omit-empty \
--count=10
説明
for-each-ref
でリポジトリの中のブランチやタグなどが一覧される。
いろいろ注文をつけられる。
--no-merged origin/master
- すでに master にマージされたものは省く
--sort -committerdate
- コミットされた日付順
- 先頭に
-
をつけると逆順の指定になる
--omit-empty
- format の結果が空行になったら出力しない
--count=10
- 直近のものから 10 個処理する
- ただし直近 10 個の中から
--omit-empty
でフィルタされる 🙁
format オプション
git の format オプションはいろいろできる。意味ごとに改行をいれるとこんな感じ。
%(if:equals=$(git config user.name))%(authorname)
%(then)
%(committerdate:short) %(refname:short)
%(end)"
まず $(git config user.name)
で自分の %(authorname)
が取得できる。
そして if:equals=...
という構文で三項演算子のような条件分岐が書ける。
$(git config user.name)
と%(authorname)
を比べて- 等しい場合に
%(committerdate:short) %(refname:short)
を出力 - そうでなければなにも出力しない
- 等しい場合に
という意味の指示になる。なお、--omit-empty
をつけてるのでマッチしない行は改行も出ないで済む。
committerdate:short
の :short
は日付の情報をどのように表示するかのオプションで、他にも :iso
や :rfc
のような形式が指定できる。
refname:short
の :short
も同様にブランチ名のフルネームをどのようにフォーマットするか指定できるもの。こちらは lstrip=1
などとしてパスのどこまでとってくるかを指定できたりする。
%(committerdate:short) %(refname:short)
という指定だと出力はこんな塩梅になる。
2023-10-04 origin/12345-myapp-branch
2023-10-03 22345-test
時間くらい見られたらいいかもしれない。 %(committerdate:format:%F %T)
としてもいいかも。