git rebase -i で過去のコミットを整理する
git rebase -i を使って、過去のコミットメッセージの修正、コミット内容の編集、コミットの統合などを行う方法
今日やったこと
git rebase -iを使って、過去のコミットを整理する方法を確認した- 直近の複数コミットを対象にするために、次のようなコマンドを使った
git rebase -i HEAD~3
- エディタに表示されたコミット一覧で、
pickを別のコマンドに変更して操作内容を指定した
pick abc1234 2つ前のコミット
pick def5678 1つ前のコミット
pick ghi9012 最新のコミット
git rebase -iの編集画面では、対象のコミットが古い順に表示されることを確認した- コミットメッセージだけを修正したい場合は
rewordを使うことを確認した
reword abc1234 2つ前のコミット
pick def5678 1つ前のコミット
pick ghi9012 最新のコミット
- コミット内容を修正したい場合は
editを使うことを確認した
edit abc1234 2つ前のコミット
pick def5678 1つ前のコミット
pick ghi9012 最新のコミット
editで止まった後は、ファイルを修正してから次の流れでコミットを修正した
git add .
git commit --amend
git rebase --continue
- 複数のコミットを1つにまとめたい場合は
squashを使うことを確認した squashしたコミットは、直前に表示されているコミットにまとめられることを確認したsquashでは、まとめるコミットのコミットメッセージを編集できることを確認した
pick abc1234 2つ前のコミット
squash def5678 1つ前のコミット
pick ghi9012 最新のコミット
- コミットを1つにまとめつつ、まとめる側のコミットメッセージを残さない場合は
fixupを使うことを確認した fixupしたコミットも、直前に表示されているコミットにまとめられることを確認した
pick abc1234 2つ前のコミット
fixup def5678 1つ前のコミット
pick ghi9012 最新のコミット
- 不要なコミットを削除したい場合は
dropを使うことを確認した
pick abc1234 2つ前のコミット
drop def5678 1つ前のコミット
pick ghi9012 最新のコミット
学んだこと
git rebase -iは、過去のコミット履歴を対話的に編集するためのコマンドHEAD~3は、現在のコミットから数えて直近3件のコミットを対象にするという意味git rebase -i HEAD~3を実行すると、対象のコミットは古い順に表示されるpickは、そのコミットをそのまま使うという意味rewordは、コミットの内容は変えずにコミットメッセージだけを修正するeditは、そのコミットの位置で一度処理を止めて、コミット内容を修正できるようにするsquashは、指定したコミットを直前に表示されているコミットにまとめるsquashでは、まとめるコミットのコミットメッセージを編集できるfixupは、指定したコミットを直前に表示されているコミットにまとめるfixupでは、まとめる側のコミットメッセージは残さないdropは、指定したコミットを履歴から削除するgit rebase -iの編集画面では、pickはp、rewordはr、editはe、squashはs、fixupはf、dropはdのように頭文字で省略できるgit commit --amendは、直前のコミットを修正するためのコマンドgit rebase --continueは、途中で止まった rebase を再開するためのコマンドgit rebase -iは履歴を書き換える操作なので、すでにリモートに push したコミットに使う場合は注意が必要
次にやること
git rebase -i中にコンフリクトが起きた場合の解決方法を確認する - rebase を途中でやめたい場合に使うgit rebase --abortについて整理する - rebase 後にリモートへ push するときの注意点を確認する