gitで実装漏れやコメント修正などの変更を過去のコミットにまとめたいことが多々あると思います。
変更したコミットを過去の離れたコミットにまとめる方法を紹介します。
想定するケース
git操作には様々なケースがあるので、この記事では以下のケースを想定しています。
- 共通処理を実装してコミット(6cd782c)を作成
- ユーザの新規追加機能を実装してコミット(34bb5d3)を作成
- 共通処理に実装やコメントの漏れがあったので追加してコミット(d0a078b)を作成
gitログにすると以下になります。
やりたいこと
共通処理の実装漏れを追加(d0a078b)を共通処理の実装(6cd782c)にまとめたいです。
2つのコミットがまとまり、最終的に以下のコミットログになります。
手順
以下3つのコミットが修正対象になります。
先頭から3番目までのコミットを修正したいので以下のコマンドを実行します。
$ git rebase -i HEAD~3
すると次の画面になります。
コミットログではコミットが上から新しい順に並びますが、この画面ではコミットが下から新しい順に並ぶので注意してください。
コミットd0a078bをコミット6cd782cにまとめたいので
から
に修正します。やったことは以下の2つです。
・コミットd0a078bとコミット34bb5d3を入れ替える
・コミットd0a078bをpick
からfixup
に変更する
fixup
は対象のコミットを上にあるコミットにまとめてくれます。
この状態にして編集画面を保存するとコミットがまとまり、やりたかった状態になります。
このときコミットを作り直しているためコミットIDも新しく作り直されています。
まとめ
複数のコミットを修正、並び替え、まとめたりする際にgit rebase -i (interactive)
が便利です。
git rebase -i
を使うことでコミットが離れていても1つにまとめることが出来ました。
コメント