2022.05.13  

【Git】rebase -i で複数のコミットをまとめる

Git    

複数のコミットをひとつのコミットとしてまとめる方法について記載します。
コミットをまとめるには、git rebase -i HEAD~nを使用します。nには直近からコミットをまとめる件数を指定します。
下記のようにコマンドを実行すると、コミットの古い方から順番に履歴が出力されます。

git rebase -i HEAD~8  
# コミットが古い方が上。新しい方が下。
pick ecf0c15 test 
pick 6855412 xxx処理のモック化対応
pick 5480880 xxxのテスト作成
pick caf7335 xxxのテストコード作成
pick 8b73497 誤記修正
pick 5f135a6 設定値に変更
pick 389312b go fmt  実行
pick f66c152 コミット実行


# Rebase b82de03..f66c152 onto b82de03 (8 commands)
#

履歴一番古いコミット「ecf0c15 test」に他のコミットをまとめます。そうするには「pick f66c152」のpickをrに、それ以外のコミットのpickをfに修正します。

※「ecf0c15 test」より新しいコミットに「r」や「p」を設定すると処理がエラーとなってしまう。基本的に古いコミットを基準に新しいコミットをまとめるイメージでいれば上手くいく。

「pick f66c152」のpickをrはコミットをまとめた後にコメントを修正する設定となるので、コメント修正が不要な場合はpを設定します。

# pickを書き換える
r ecf0c15 test
f 6855412 xxx処理のモック化対応
f 5480880 xxxのテスト作成
f caf7335 xxxのテストコード作成
f 8b73497 誤記修正
f 5f135a6 設定値に変更
f 389312b go fmt  実行
f f66c152 コミット実行

# Rebase b82de03..f66c152 onto b82de03 (8 commands)
#

修正が完了したらesc:qw!を入力して保存します。

余談ですが上記以外にも次の設定が行えます。

# Commands:
# p, pick <commit> = use commit
# r, reword <commit> = use commit, but edit the commit message
# e, edit <commit> = use commit, but stop for amending
# s, squash <commit> = use commit, but meld into previous commit
# f, fixup [-C | -c] <commit> = like "squash" but keep only the previous
#                    commit's log message, unless -C is used, in which case
#                    keep only this commit's message; -c is same as -C but
#                    opens the editor
# x, exec <command> = run command (the rest of the line) using shell
# b, break = stop here (continue rebase later with 'git rebase --continue')

コミットをまとめた先の「ecf0c15 test」のコミットメッセージを変更するようviが立ち上がります。

test # ← ここを書き換えることでコメントを修正できる

# Please enter the commit message for your changes. Lines starting

今回「テスト」を 「コミットまとめ」に修正します。

コミットまとめ # ← コメントを修正

# Please enter the commit message for your changes. Lines starting

git log --oneline -n 表示件数 コマンドでコミットの状況を確認します。すると上記でfと設定したコミットが消え、先ほど設定した「コミットまとめ 」のメッセージのみが表示されていることを確認できます。

これでローカルのコミットをまとめられました。

git log --oneline -n 3
882151a (HEAD -> feature/XXX) コミットまとめ 
b82de03 hogehoge
1607b8c fugafuga

あとはgit push -fを実行すればリモートにも変更が適用されます。

git push -f
コメント
現在コメントはありません。
コメントする
コメント入力

名前 (※ 必須)

メールアドレス (※ 必須 画面には表示されません)

送信