今日やったこと

  • 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 の編集画面では、pickprewordreditesquashsfixupfdropd のように頭文字で省略できる
  • git commit --amend は、直前のコミットを修正するためのコマンド
  • git rebase --continue は、途中で止まった rebase を再開するためのコマンド
  • git rebase -i は履歴を書き換える操作なので、すでにリモートに push したコミットに使う場合は注意が必要

次にやること

  • git rebase -i 中にコンフリクトが起きた場合の解決方法を確認する - rebase を途中でやめたい場合に使う git rebase --abort について整理する - rebase 後にリモートへ push するときの注意点を確認する