あるファイルが最近どの程度の頻度で更新されたのか、マージコミット単位(≒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 ...