🔖
Gitでコミットをひとつにまとめる方法
はじめに
Gitで開発していると、作業中に何度もコミットしてしまい、
後から 「コミットを1つにまとめたい」と思うことがあります。
私自身も最初はやり方がわからず、
amend
や rebase
を使って試行錯誤してきました。
本記事では、複数のコミットを1つにまとめる方法を紹介します。
実際のコマンド例と一緒に、注意点も添えて解説します。
--amend
)
方法①:直前のコミットにまとめる(git add .
git commit --amend
- 最後のコミットに変更を上書きします。
-
git commit
の後に「これも一緒にまとめたい」というときに便利です。
❗ 注意
-
既にpush済みのコミットを
--amend
した場合は強制pushが必要です。
git push --force-with-lease
git rebase -i
)
方法②:複数のコミットをまとめる(git rebase -i HEAD~3
直近3つのコミットをまとめたいときの例です。
pick
を squash
に変更する
ステップ①:pick ff1c4e9 最初のコミット
pick bc9f8e1 2つ目のコミット
pick f8ae4ce 3つ目のコミット
この状態から、2つ目・3つ目のコミットを1つ目にまとめるように変更します。
pick ff1c4e9 最初のコミット
squash bc9f8e1 2つ目のコミット
squash f8ae4ce 3つ目のコミット
編集後、保存して終了するとコミットメッセージの編集画面に移ります。
💡 補足:エディタ操作は環境により異なります。
エディタ 編集開始 削除 保存&終了 vim(macなど) i
→ 編集dd
Esc
→:wq
nano(Windowsなど) そのまま入力可 Ctrl + K
Ctrl + O
→Enter
→Ctrl + X
GUI系(VS Codeなど) そのまま入力 Backspace など 保存して閉じる 使用エディタは
git config core.editor
で確認できます。
ステップ②:コミットメッセージを1つにまとめる
編集画面には、まとめる対象のコミットメッセージが全て表示されます。
変更前の状態
# This is a combination of 3 commits.
# This is the 1st commit message:
最初のコミット
# This is the commit message #2:
2つ目のコミット
# This is the commit message #3:
3つ目のコミット
変更後の例(vimの場合)
# This is a combination of 3 commits.
# This is the 1st commit message:
ログイン機能の実装完了
- フォームの追加
- バリデーションの実装
- セッション保存処理の追加
コメント(
#
)以外の行がそのまま新しいメッセージになります。
複数行OKなので、分かりやすく整理して書き換えましょう。
❗ 注意
-
rebase
は履歴を書き換える操作なので、push済みなら強制pushが必要です。
git push --force-with-lease
方法③:全てのコミットを1つにまとめたい場合
個人開発や試作ブランチなど、履歴が要らない場合には
ブランチ内の全コミットをまるごと1つにまとめることも可能です。
git reset --soft $(git rev-list --max-parents=0 HEAD)
git commit -m "ひとつにまとめたコミット"
解説
-
--soft
リセットで 作業内容は保持したまま、ステージング状態に戻す -
rev-list --max-parents=0 HEAD
は「最初のコミット」を取得するコマンド - 全ての変更を新しいコミットとしてまとめ直すことが可能
まとめ
方法 | 目的 | コマンド | 注意点 |
---|---|---|---|
amend | 直前のコミットを修正 | git commit --amend |
push済みなら--force-with-lease
|
rebase | 複数のコミットをまとめる | git rebase -i HEAD~n |
push済みなら強制push |
reset + commit | 全てを1つにまとめる | git reset --soft $(git rev-list --max-parents=0 HEAD) |
履歴が書き換わるので注意(チーム作業では慎重に) |
おわりに
コミット履歴を整えると、
チーム開発でもレビューしやすく、あとから履歴を見るときもすっきりします。
特に amend
と rebase
は怖く感じるかもしれませんが、慣れてくると便利です。
本記事が参考になれば幸いです。
Discussion