はじめに
コミットをまとめる手段があることを先輩から教えていただいたため、学んだことをまとめます。
squashとは
複数のコミットをまとめてひとつにすること。
これによりコミット数が減り、PRの可読性が高まり、コミット履歴が追いやすくなる可能性があります。(場合によりけり)
WIPコミットを削除する
次のような履歴があるとします
$ git log --oneline
b2b2b2b fix: タイポ修正②
a1a1a1a fix: タイポ修正①
d4e5f6a add: ログイン画面のバリデーション追加
f7g8h9i wip: ログイン画面作成中
j1k2l3m init: プロジェクト初期コミット
1. 過去4つのコミットを編集する
$ git rebase -i HEAD~4
エディタが開いて次のような画面が出ます:
pick f7g8h9i wip: ログイン画面作成中
pick d4e5f6a add: ログイン画面のバリデーション追加
pick a1a1a1a fix: タイポ修正①
pick b2b2b2b fix: タイポ修正②
ここを編集して操作します。
2. WIPコミットを削除したい → 行を消すだけ
削除する: wipコミット
行をそのまま消せばOK
pick d4e5f6a add: ログイン画面のバリデーション追加
pick a1a1a1a fix: タイポ修正①
pick b2b2b2b fix: タイポ修正②
3. タイポ修正をひとつ前のコミットにまとめたい → "squash" を使う
pick d4e5f6a add: ログイン画面のバリデーション追加
pick a1a1a1a fix: タイポ修正①
squash b2b2b2b fix: タイポ修正②
squashにすると、このコミットは前のコミットに結合される。
完了後のコミット履歴
xxxxxxx add: ログイン画面のバリデーション追加
xxxxxxx fix: タイポ修正
j1k2l3m init: プロジェクト初期コミット
2つあったタイポ修正が1つのコミットに!
まとめ
このやり方を知ってから後でコミット履歴を修正できることがわかったため、恐る恐るコミットすることがなくなりました。
また、PR上でのコミット履歴を整理することができ、とても便利なコマンドを知ることができよかったです。
参考