gitのtag間の差分に含まれるPull Request (GitHub) を抽出する

September 11, 2022

これは何?

前回のリリースから、対象のリリースの間で、マージされた 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

参考


SHARE

Profile picture

Written by tamesuu