$shibayu36->blog;

クラスター株式会社のソフトウェアエンジニアです。エンジニアリングや読書などについて書いています。

特定ファイルを更新したマージコミットを探す

あるファイルが最近どの程度の頻度で更新されたのか、マージコミット単位(≒PullRequest単位)で調べたいことがあった。git logのコマンドを使ったら簡単に調べられたのでメモ。

たとえば1年以内に https://github.com/x-motemen/ghq のレポジトリで .github/ 以下に変更を加えたマージコミットを取得したい場合はこんな感じ。

$ git log --merges -m --first-parent --pretty=format:"%cd - %an: %s(%H)" --since="1 year ago" .github/
Sun Apr 16 23:27:26 2023 +0900 - Masayuki Matsuki: Merge pull request #359 from x-motemen/coverage(e7f736f22376d3e897464a1ef5425fb8d3a11b7c)
Thu Feb 23 00:45:12 2023 +0900 - Masayuki Matsuki: Merge pull request #362 from x-motemen/version-file(a93dc0900f4839ecff9af2fabc3bcc5dc7d4771e)
Wed Feb 22 20:47:05 2023 +0900 - Masayuki Matsuki: Merge pull request #358 from x-motemen/fix-win-test(c6bf0744d27d79328fcf608187bf9573e5f87a3d)
Wed Feb 22 16:45:41 2023 +0900 - Masayuki Matsuki: Merge pull request #356 from hezhizhen/typos-lint(434061b60df2bf2b5acccc70d5cf620f1587b029)
Wed Feb 22 11:22:17 2023 +0900 - Masayuki Matsuki: Merge pull request #354 from x-motemen/tagpr-from-v1.3.0(d398714567c147122649f81d2a4f7ed08e477e9d)
Wed Feb 22 10:55:24 2023 +0900 - Masayuki Matsuki: Merge pull request #353 from x-motemen/tagpr(367183b5c20512c5cb09b4766d8b0b269e7b7e35)

それぞれのオプションの意味を解説すると

  • --mergesでマージコミットだけに限定
  • -mを付けると、gitのコマンドがマージコミットのdiffを認識できるようになる
    • これがないとどのファイルを変更したのかなどの情報が取れない
  • --first-parentを付けると、トピックブランチが変更した差分のみを見れる
    • main...topic-branch的な差分になるので、あるマージコミットが実際に変更した差分になりやすい
  • --prettyはフォーマットを決めている
  • --sinceで1年以内に限定

これにさらに-pオプションを付けるとdiffを見ることができ、また-Sや-Gを使うことで検索もできる。

$ git log -p -G go-version-file --first-parent -m --pretty=format:"%cd - %an: %s(%H)" --merges --since="1 year ago" .github/
Thu Feb 23 00:45:12 2023 +0900 - Masayuki Matsuki: Merge pull request #362 from x-motemen/version-file(a93dc0900f4839ecff9af2fabc3bcc5dc7d4771e)
diff --git a/.github/actions/release/action.yml b/.github/actions/release/action.yml
index da9fe61..ea39403 100644
--- a/.github/actions/release/action.yml
+++ b/.github/actions/release/action.yml
@@ -13,7 +13,7 @@ runs:
   - name: setup go
     uses: actions/setup-go@v3
     with:
-      go-version: 1.x
+      go-version-file: go.mod
   - name: release
     run: |
       make crossbuild upload
...