今日の英語表現 21/30 · ステージ: レビューを受ける・返答する。 例文はすべてこの記事のために作られたものです。実際のりポジトリのコメントをそのまま持ってきたものではなく、コミットメッセージは例です。
目次
概要
| 表現 | Could you squash your commits? / Squashed into one commit. |
| 意味 | コミットをまとめてもらえますか? / 1つのコミットにまとめました。 |
| 使う場面 | レビュー終盤の依頼と返答 |
| 丁寧さ | 中立。手順に関する依頼です |
1. 意味とニュアンス
squashは「押しつぶす」という意味で、Gitでは 複数のコミットを1つにまとめることを指します。 git rebase -i でsquashやfixupを選択するか、 git commit --fixup と git rebase --autosquash を一緒に使ってまとめます。
なぜまとめてほしいのでしょうか?レビューを経ると、「fix typo」、「address review comments」、「wip」などのコミットがたまります。こうしたコミットはレビュー時には便利ですが、マージされた後には履歴を読みにくくしてしまいます。KubeVirtのレビュアーガイドでは、コミット1つ1つに意味がなければならないとし、「Fix reviewer comments」、「wip」、「addition」のようなコミットはまとめるよう依頼するよう案内しています。
いつまとめるかも重要です。Kubernetesのコントリビューションガイドでは、レビュー中は修正事項を新しいコミットとして積み上げ、まだスクワッシュしないように述べています。レビュアーが修正分を個別に確認できなければならないためです。スクワッシュするのは依頼を受けた時、通常はLGTMをもらう頃合いに行います。同ガイドでは、修正用コミットはまとめるが、1つの目的に向かいつつも互いに独立した変更はまとめないという基準も示しています。また、Prowを使用しているリポジトリでは tide/merge-method-squash ラベルを付与することでマージ時にボットにコミットをまとめさせることができ、これを行えば手動でまとめる場合とは異なりlgtmラベルが消えたりCIを再実行したりする必要がないと説明しています。
スクワッシュを行うとコミットハッシュが変わるため、強制プッシュが必要です。第12回で見た git push --force-with-lease を使います。
2. 例文
状況1: メンテナーからの依頼
This looks good to merge. Could you squash the fixup commits into the main one before we merge?
状況2: 作成者からの返答
Done. Squashed into two commits: one for the API change and one for the generated files.
生成されたファイル(generated files)を別のコミットにしておくことは、レビュアーが人間による変更だけに注目しやすくするためのよくある慣習です。リポジトリのルールに従います。
状況3: 作成者から先に尋ねる場合
Should I squash the commits now, or would you prefer to keep them separate until the review is done?
レビュアーによって好みが異なるため、尋ねるのが最も安全です。
3. 似た表現との違い
- Squash and merge. GitHubのマージ方式の名前です。メンテナーがこのボタンでマージすれば、作成者が自分でまとめる必要はありません。
- Could you clean up the commit history? スクワッシュだけでなく、コミットメッセージの整理や順番の入れ替えまで幅広く指します。
- Fixup commit. 直前のコミットを修正するための小さなコミットです。後でまとめることを前提としています。
4. 日本人がよくやりがちな間違い
- レビュー中に 修正するたびにスクワッシュして強制プッシュすること。 レビュアーが何を変更したのか見つけにくくなります。
- 修正した文(PRコメント): Pushed the fixes as separate commits for easier review. I'll squash them before merge.
- I merged my commits into one. mergeはブランチのマージを想起させるため紛らわしいです。
- 修正した文: I squashed my commits into one.
- Squash is done. 主語と動詞が不自然です。
- 修正した文: Done, squashed.
5. 一行練習
作成者の立場で次の内容をコメントとして記述してください。
レビュー修正用コミットをまとめて1つのコミットにしました。強制プッシュしました。
模範解答
I've squashed the review fixes into a single commit and force-pushed.
force-pushは動詞として使う際にもハイフンを入れることが多いです。強制プッシュしたことを知らせると、レビュアーは画面が変わった理由をすぐに理解できます。
Titiの一言。 レビュー中はコミットを積み上げ、終わるときにまとめます。順序を守ればレビュアーも履歴もすっきりします。
参考
- Kubernetesコントリビューションガイド、Pull Request Process (Squashing): https://github.com/kubernetes/community/blob/master/contributors/guide/pull-requests.md
- KubeVirtレビュアーガイド: https://github.com/kubevirt/kubevirt/blob/main/docs/reviewer-guide.md
- Git 문서, git-rebase(
--autosquash): https://git-scm.com/docs/git-rebase