Git上でコミットを修正したいとき、rebase -iさえ覚えていればいろいろできることを知り感激。 この感激を忘れないために記事にすることにしました。
git rebase -iでできること
git rebase -iでできることのうち、よく使うコマンドについてだけ書きます。
- 過去のコミットメッセージの変更
- 過去のコミットを合体させる
- 過去のコミットを消す
具体的な手順
過去のコミットメッセージの変更
やりたいこと↓
HEADを含めて2個前のコミットを修正したいので、下記のコマンドを打ちます。
git rebase -i HEAD~2
すると、下記のようなエディターが開くので、対象のコミットのpickをrewordに書き換え保存します。
上記でエディターを保存して消すと、さらにエディターが開くのでtypoされたコミットメッセージを正しいコミットメッセージに修正します。
過去のコミットを合体させる
やりたいこと↓
今回も同じように、下記のコマンドを打ってエディターを開きます。
git rebase -i HEAD~2
このとき、エディターに記載された対象のコミットのpickをsquashに書き換えます。
さらに新しく開いたエディターを図6のように編集することで、コミットを合体し、かつコミットメッセージを修正することができます。
なお、図5でpickをsquashではなく、fixupと書き換えるとコミットメッセージを変えずにコミットを合体させることができます。(図7のようになります)
過去のコミットを消す
やりたいこと↓
同じようにgit rebase -i をして、pickをdropに置き換えるだけです。
まとめ
git rebse -iを打つと出てくるエディターに対して、対象のコミットをpickから書き換えることで、様々なコミットの改変をできることを学びました。 pickから書き換える文字列とそれによって改変できる内容は下記の通りです。
- 過去のコミットメッセージの変更:reword
- 過去のコミットを合体させる
- コミットメッセージを変更する場合:squash
- コミットメッセージを変更しない場合:fixup
- 過去のコミットを消す:drop