1. ホーム 
  2. 備忘録 
  3. その他

複数のコミット内容を変更する

複数のコミット内容を変更する

~ $ git rebase -i <コミットID>

# 先頭から3つ巻き戻ったコミットを基点に、以降のコミット内容を変更する
git rebase -i HEAD~3
# ちなみにマージした場合の2番目の親を指定するときは ^ を使って HEAD^2 と書く

git rebase -i コマンドを使うと複数のコミット内容を遡って変更することができる

直前のコミット内容を変更する git commit --ammend と同様に既にリモートリポジトリにプッシュされたコミットには使用してはいけない点に注意しておく

-i の i は --interactive(対話式) の略であり、対話型リベースとも呼ばれ、やり取りしながらリベース(履歴変更)を行うという意味である


git rebase -i コマンドを実行すると、指定した範囲のコミット内容が表示される(以下は直近3件を範囲としたケース)

pick gh2152a タイトル修正
pick kyri182 ファイル追加
pick 86kls0d README修正

上記の例であれば、表示されている3つの内容に対して上から順に1つずつリベースが行われる

この際、 pick の文字を edit に変更しておくと、その箇所で一度コミットの適用が停止する

コミットの適用が停止するので、そこでファイルを修正して git commit --amend コマンドでコミット内容を修正する

修正が完了したら、次のコミットを改めてリベースしていきたいので、git rebase --continue コマンドを使って次のコミットへと進んでいく

HEAD の位置までリベースが完了したら終了となる


コミットの削除・分割・順番の入れ替え

上記の手順で表示された pick <コミットID> <コミットメッセージ> の行を入れ替えたり、削除したりすることでコミット順番の入れ替え・削除が可能である

コミット内容を分割したい場合は、分割したいコミットを edit に変更して、一度コミットの適用を停止させたあと、git reset HEAD~ コマンドで該当のコミット内容をステージから一度除去する

そのあと必要な修正を行ったのちに git commit --amend コマンドを行えばコミット内容を分割することができる