コミット粒度に気を付けてコメントもしっかり書いておくと、PR作成してどんなことやったかを示す場合にコミットハッシュとコメントのリストを貼り付けることがある
以前コード結構書いていたときは手動でやっていた
最近やろうと思ったら意外と作業がだるかったのでワンライナーで貼り付けられるようにした
下記のスクリプトをzshやbashのスクリプトとして登録しておく(aliasでも良い)
function gll(){
git log --reverse $(git merge-base $(git for-each-ref --format='%(refname:short)' refs/heads | grep --color=no -P 'main|master') $(git branch --show-current))..$(git branch --show-current) --pretty="format:%h %s"
}
タイトル的にはワンライナーなので次のようにコマンド実行すればOK
git log --reverse $(git merge-base $(git for-each-ref --format='%(refname:short)' refs/heads | grep --color=no -P 'main|master') $(git branch --show-current))..$(git branch --show-current) --pretty="format:%h %s"
こんな感じになる
$ gll 6f05d16 feat: json形式の出力で何もannotationがない場合はから配列を返すようにした f693674 feat: json形式の出力の最後に改行を入れるようにした e31da05 test: json出力で空の場合のテストコードの追加
結論だけだとここまでだが、以下に段階を踏んで進めたログを載せておく
分岐元からのコミットログを出力する
git log $(git merge-base main your-feature-branch)..your-feature-branch --pretty="format:%h %s"
$ git log $(git merge-base main your-feature-branch)..your-feature-branch --pretty="format:%h %s" e31da05 test: json出力で空の場合のテストコードの追加 f693674 feat: json形式の出力の最後に改行を入れるようにした 6f05d16 feat: json形式の出力で何もannotationがない場合はから配列を返すようにした
main(またはmaster)ブランチから分岐したyour-feature-branchのコミットログを表示する
git merge-base main your-feature-branchで、mainブランチとyour-feature-branchの共通の祖先(分岐ポイント)を見つけるgit logで分岐ポイントからyour-feature-branchまでのコミットログを表示
main(またはmaster)ブランチ以外のブランチから分岐した場合は、適切なブランチ名に置き換える
ブランチ名の取得
この使い方をしたいケースはPRを出すブランチで実行してPRに貼り付けて…という感じなのでブランチ名もほぼ固定で良さそう
currentブランチとデフォルトブランチを取得できるようにしたほうが便利そう
current branch
git branch --show-current
デフォルトブランチ
リモートブランチへアクセスすれば取得する方法はあるようだった、このくらいのことでリモートリポジトリへアクセスしたくなかったので下記の方法を取っている
だいたいmainかmasterかという前提のもと次のように出力する
git for-each-ref --format='%(refname:short)' refs/heads | grep --color=no -P 'main|master'
zshの設定でコマンドとして使えるようにする
これまでの工程をすべて含めると以下のようにワンライナーで実行できるのでそれをzshのfunctionに設定する
function gll(){
git log --reverse $(git merge-base $(git for-each-ref --format='%(refname:short)' refs/heads | grep --color=no -P 'main|master') $(git branch --show-current))..$(git branch --show-current) --pretty="format:%h %s"
}
- --reverseオプション
普通に出力すると最新のコミットが一番上に来る、PullRequestなどで列挙する場合は実装した順番に上から表示させたほうが直感的なので逆順に表示させるため--reverseオプションをつけている
$ gll 6f05d16 feat: json形式の出力で何もannotationがない場合はから配列を返すようにした f693674 feat: json形式の出力の最後に改行を入れるようにした e31da05 test: json出力で空の場合のテストコードの追加
いい感じ