今日やったこと

  • 直前ではない過去のコミットを修正する方法を確認した
  • git commit --amend だけでは、直前のコミットしか修正できないことを確認した
  • 2つ前や3つ前のコミットを修正したい場合は、git rebase -i を使うことを確認した
  • git rebase -i HEAD~3 のように、修正したいコミットを含む範囲を指定することを確認した
git rebase -i HEAD~3
  • エディタに表示されたコミット一覧から、修正したいコミットの pickedit に変更した
edit abc1234 修正したいコミット
pick def5678 その次のコミット
pick ghi9012 最新のコミット
  • rebase が対象のコミットで止まったら、ファイルを修正して git add した
  • 修正内容をそのコミットに反映するために、git commit --amend を実行した
git add 修正したファイル
git commit --amend
  • コミットの修正が終わった後、git rebase --continue で rebase を再開した
git rebase --continue
  • rebase の途中でコンフリクトが起きた場合は、ファイルを修正してから git add し、再度 git rebase --continue することを確認した

学んだこと

  • git commit --amend は、基本的に直前のコミットを修正するためのコマンド
  • 直前ではないコミットを修正したい場合は、git rebase -i で一度そのコミットの位置まで戻る必要がある
  • git rebase -i HEAD~3 は、直近3件のコミットを編集対象にするという意味
  • edit は、そのコミットの位置で rebase の処理を一時停止するための指定
  • edit で止まった状態では、そのコミットを直前のコミットとして扱える
  • そのため、edit で止まった後に git commit --amend を使うことで、過去のコミットを修正できる
  • git rebase --continue は、修正後に残りのコミットを順番に適用していくためのコマンド
  • rebase はコミット履歴を書き換える操作なので、すでにリモートへ push 済みのコミットを修正する場合は注意が必要
  • 自分だけが使っているブランチであれば比較的扱いやすいが、他の人と共有しているブランチでは慎重に使う必要がある

次にやること

  • rebase 後にリモートへ push する場合の注意点を整理する
  • git push --force-with-lease の意味を確認する
  • 共有済みのコミット履歴を書き換えるときのリスクを整理する

関連