1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Squashを使ってPullRequestのコミットログを綺麗にする

Posted at

はじめに

プルリクエストを出す際に、試行錯誤してcommitを繰り返した結果ログが汚くなっているケースがあると思います。
そんな時に、コミットのログを1つにまとめる方法として、git rebase -i を紹介します。

git rebase -i でできること

git rebase -i は、過去のコミットを対話的に編集できるコマンドです。

主に以下の用途で使われます。

  • 複数のコミットを 1 つにまとめる
  • コミットメッセージを整える
  • PR 前に履歴を見やすくする

今回は「コミットをまとめる」使い方に絞ります。

手順

1. 対象のコミットを確認する

git log --oneline

例:

a3f1c2d add validation
b7e9a01 fix typo
c2d8e44 add API endpoint
...

今回は、直近 3 件をまとめます。

2. rebase -i を実行する

git rebase -i HEAD~3

エディタが開き、次のように表示されます。

pick c2d8e44 add API endpoint
pick b7e9a01 fix typo
pick a3f1c2d add validation

上が古く、下が新しいコミットです。

3. squash を指定する

先頭のコミットを残し、2 行目以降を squashs)に変更します。

pick c2d8e44 add API endpoint
squash b7e9a01 fix typo
squash a3f1c2d add validation

保存してエディタを閉じます。

squash と fixup の違い

  • squash
    コミットを統合し、メッセージを編集できる
  • fixup
    コミットを統合し、メッセージは自動的に破棄される

typo 修正など、メッセージが不要な場合は fixup が便利です。

4. コミットメッセージを整える

統合後のコミットメッセージ編集画面が表示されます。

不要なメッセージを削除し、最終的に残したい内容だけを記載します。

add API endpoint with validation

保存して閉じれば Squash は完了です。

5. rebase 後は force push する

git rebase -iコミット履歴を書き換える操作です。
そのため、すでにリモートに push 済みのブランチでは、通常の push が失敗します。

その場合は、対象ブランチに対して force push を行います。

git push --force-with-lease

--force-with-lease を使うことで、

  • 自分以外が更新していない場合のみ push される
  • 誤って他人の変更を消すリスクを減らせる

という安全性が確保できます。

基本的には --force ではなく、--force-with-lease を使うのがおすすめです。

GitHub であれば、Squash And Mergeも便利

GitHub の設定でマージ時にコミットをまとめてマージする設定にすることができます。

上記設定以外のチェックを外すことで、Squash を強制することもできます。
リポジトリの運用方針とマッチすればこちらの設定をしてしまうのがお手軽です。

私のチームでも以前はこちらの設定をしていたのですが、以下の理由から現在は利用をやめています。

  • git flow と相性が悪い
    • main merge時に間違えやすい (main merge 時だけ Squash を禁止するような設定はできない)
  • ブランチから別ブランチを切るとConflictする
  • git log がローカルとリモートで食い違うため、git prune によるローカルのブランチ生理ができない

終わりに

「PR を出す前に履歴を綺麗にしたい」場面は多くあると思います。

git rebase -i を使えば、マージ方法に依存せず、必要なタイミングだけ履歴を整理できます。

ブランチ戦略やチームの運用に合わせて、適切な方法を選択する参考になれば幸いです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?