こちらはGitHub Advent Calendar 2024 15日目の記事です!
はじめに
-
GitHubのPRのマージ機能で
Squash and merge
を使用していたのですが、コミット履歴がシンプルになるのはメリットですが、マージのコミット履歴が残らないので、以前のPRの差分が出てしまうのが気になるところ。コミットをまとめるsquash
について手順をまとめます。
内容
スカッシュ前の状態
- Gitのログを確認
git log --oneline
スカッシュする
- 4つ前のコミットをまとめたい場合
git rebase -i HEAD~4
- 最初のコミットからまとめたい場合
git rebase -i --root
- 以下の表示される場合は、コミット履歴が4つ以上存在しないのでコミット履歴を確認
fatal: invalid upstream 'HEAD~4'
-
pick
からs
に変更しコミットをまとめていく
pick 1b6fe83 first commit
pick 09c163d first commit
pick 545233b first commit
pick 2041b53 first commit
# Rebase 2041b53 onto 9e28453 (4 commands)
-
i
でインサートモードにして、入力する
pick 1b6fe83 first commit
pick 09c163d first commit
pick 545233b first commit
pick 2041b53 first commit
-- INSERT --
- ほぼ最初のコミット履歴を修正することはないけど、最初のコミット履歴をスカッシュしようとすると以下のエラーになる
error: cannot 'squash' without a previous commit
You can fix this with 'git rebase --edit-todo' and then run 'git rebase --continue'.
Or you can abort the rebase with 'git rebase --abort'.
- スカッシュを中止
git rebase --abort
pick 1b6fe83 first commit
s 09c163d first commit
s 545233b first commit
s 2041b53 first commit
-
変更が完了したら
ESC
キーでインサートモードを抜けて、:wq
で保存 -
コミットメッセージをまとめる
# This is a combination of 4 commits.
# This is the 1st commit message:
first commit
# This is the commit message #2:
first commit
# This is the commit message #3:
first commit
# This is the commit message #4:
first commit
# This is a combination of 4 commits.
# This is the 1st commit message:
first commit
# This is the commit message #2:
# This is the commit message #3:
# This is the commit message #4:
- 保存後、Gitログを確認
まとめ
簡単にコミットをまとめる方法を紹介しました。
不要なコミットをスカッシュしてまとめることで、コミット履歴が見やすくなるのでぜひ試してみてください。