これは何?
前回のリリースから、対象のリリースの間で、マージされた Pull Request の一覧を取得する方法を調べました。
確認環境
$ git --version
git version 2.34.1
tag をローカルに pull
@local PC
$ git pull --tags
差分を抽出
対象ブランチをリリース対象のブランチ (tagを公開する前) にします。
$ git checkout release-target
前回のリリースのタグを previous-release
とします。
$ git log --merges --first-parent --pretty=format:"%s" previous-release.. | awk '{print "- " $4}'
- #xxx1
- #xxx2
- #xxx3
コマンドを1つずつ見ていく
git log --help
で見ていきます。
—merges
マージコミットだけを出力します。
--merges
Print only merge commits. This is exactly the same as --min-parents=2.
—first-parent
マージコミットの中で、親とブランチへのマージコミットだけを抜き出します。
--first-parent
Follow only the first parent commit upon seeing a merge commit. This option can give a better overview when viewing the
evolution of a particular topic branch, because merges into a topic branch tend to be only about adjusting to updated
upstream from time to time, and this option allows you to ignore the individual commits brought in to your history by such
a merge.
This option also changes default diff format for merge commits to first-parent, see --diff-merges=first-parent for details.
—pretty
--pretty[=<format>], --format=<format>
Pretty-print the contents of the commit logs in a given format, where <format> can be one of oneline, short, medium, full,
fuller, reference, email, raw, format:<string> and tformat:<string>. When <format> is none of the above, and has
%placeholder in it, it acts as if --pretty=tformat:<format> were given.
%s
でコミットメッセージだけを表示します。
文字列を抽出
上記までで、このような文字列が取得できます。
Merge pull request #xxx from develop/hoge
Merge pull request #xxx2 from develop/hoge2
あとは #xxx
/ #xxx2
を抽出するだけです。
例はこちら。
awk '{print "- " $4}
動きをイメージしやすいように、簡略化してある例も置いておきます。
$ echo a b c d | awk '{print $3}'
c