$shibayu36->blog;

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

git logの内容を検索する-Sと-Gの違い

ずっとgit logの内容を検索するときに-Sオプションを使っていたが、実は近いオプションに-Gオプションもあり、探したい内容によっては使い分けないとダメということを初めて知った...

詳しくはhttps://git-scm.com/docs/git-log-S-Gのドキュメントを見てほしい。簡単にまとめると

  • -Sは指定した文字列の出現回数が変わるdiffがあるcommitを検索する
  • -Gは指定した正規表現がマッチする文字列がdiffにあるcommitを検索する

ドキュメントの事例部分が結構わかりやすくて、以下のようなdiffがあった場合

+    return frotz(nitfol, two->ptr, 1, 0);
...
-    hit = frotz(nitfol, mf2.ptr, 1, 0);
  • -S frotzで検索をかけると、frontsの出現回数は変わってないのでマッチしない
  • -G frotzで検索をかけると、diffの中にfrotzという文字列は存在するのでマッチする

この差を意識しないと意図したcommitを探すことが出来ない。使い分けよう。

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

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

より少なく、しかしより良く - 「エッセンシャル思考」読んだ

自分がなんでもやりたいタイプなので、この本に書いてあることは中々刺さった。幸福になるには「より少なく、しかしより良く」を追求すべきという本。プライベートや仕事でとにかく忙しく時間がないと思っている人は読んでみると良い。

印象に残ったのは次のことだ。

  • 現代人の最優先課題は、優先順位づけの能力をキープすること
    • 睡眠不足では一番最初にそこが減ってしまうのでダメ
    • 一流のバイオリニストは1日平均8.6時間の睡眠 & 週平均2.8時間の昼寝。睡眠による並外れた集中力で、1時間あたりの練習効果を最大限にする
  • もっとも厳しい基準でやることを決める
    • 「絶対やりたい」「やらない」の2択にする。やろうかな程度なら却下、イエスと言うのは絶対やるしかないと確信した時だけ
    • 自分の中で最重要基準をひとつ用意し、100点満点で90点以上取った時だけOKとする
  • やたらと手を出して後から調整しようとすると、どうしようもなくなって不本意に手放すことになる
    • 反射的に手を出すのをやめて何もしないことを選ぼう。たとえばチャットなどで議論が起きている時に反射的に返信ボタンを押さない

とにかく自分が必要と思ったより多く寝て、絶対やりたいことだけ手を出し、反射的に口出すのはやめましょうっていう学びを得た。

読書ノート

- エッセンシャル思考とは、「より少なく、しかしより良く」を追求する生き方 19
- 本当に重要な物事を見極める5つのやり方 77
    - じっくりと考える余裕、情報を集める時間、遊び心、十分な睡眠、何を選ぶかという厳密な基準
- 一流のバイオリニストは1日平均8.6時間の睡眠 & 週平均2.8時間の昼寝 116 ☆
    - 睡眠による並外れた集中力で、1時間あたりの練習効果を最大限にする
- 現代人の最優先課題は、優先順位づけの能力をキープすること 120
    - 睡眠不足では一番最初にそこが減ってしまうのでダメ
- 最も厳しい基準で決める 122 ☆
    - 「絶対やりたい」「やらない」の2択にする
    - やろうかな程度なら却下、イエスと言うのは絶対やるしかないと確信した時だけ
    - 自分の中で最重要基準をひとつ用意し、100点満点で90点以上取った時だけOKとする 124
- 本質的な目標を決めるための問いは、「たったひとつのことしかできないとしたら、何をするか?」 149 ☆
    - 細かい言葉にこだわらない。バズワードに引きずられる恐れ
    - 具体的でわかりやすい言い方にはしよう。「達成をどうやって判定するのか?」の質問に答えられることが大事
- 上手に断るコツ 160
    - 判断を友人関係などの関係性と切り離す
    - ノートいう直接的な言葉を使わずに断る 164
        - とりあえず黙る
        - 代替案を出す
        - 予定を確認して折り返す。一旦時間を置くと断ることが容易になる
        - どの仕事を後回しにするか逆質問する
    - トレードオフに目を向ける。ここでイエスと言ったら自分は何を失うのか ☆
- 上手に手放すテクニック 173
    - まだこれを持っていないとしたら手に入れるのにいくら払うか?まだこのチャンスが手に入っていなかったら、手に入れるためにどれだけのコストを払うか?
    - 何かを言う前に5秒まつ。反射的に言わずに「これは本当に重要か?」を考える
    - 逆プロトタイプ。ひとまずやめてみて誰が困るか様子を見る
- やたらと手を出して後から整理しようとするとどうしようもなくなって不本意な削除を選ぶことになる 188
    - 反射的に手を出すのをやめて何もしないことを選ぼう
    - たとえばチャットなどで議論が起きている時に反射的に返信ボタンを押さない