直前ではないコミットを修正する方法を整理する
git commit --amend では修正できない過去のコミットを、git rebase -i と edit を使って修正する流れを整理する
今日やったこと
- 直前ではない過去のコミットを修正する方法を確認した
git commit --amendだけでは、直前のコミットしか修正できないことを確認した- 2つ前や3つ前のコミットを修正したい場合は、
git rebase -iを使うことを確認した git rebase -i HEAD~3のように、修正したいコミットを含む範囲を指定することを確認した
git rebase -i HEAD~3
- エディタに表示されたコミット一覧から、修正したいコミットの
pickをeditに変更した
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の意味を確認する- 共有済みのコミット履歴を書き換えるときのリスクを整理する