git リベースで履歴を書き換える

コミットをきれいに整えてからpushしたい時は履歴を書き換えよう。

*GitHubにPushしていないコミット

直前のコミットをやり直す
git commit --amend

リモートリポジトリにPushしたコミットはやり直したらダメだよ。

複数のコミットをやり直す
git rebase -i <コミットID>
git rebase -i HEAD~3

pick gh21f6d ヘッダー修正
pick 193054e ファイル追加
pick 84gha0d README修正

-iは--interactiveの略だよ。 対話的リベースといって、やり取りしながら履歴を変更していくよ。

やり直したいcommitをeditにする

edit gh21f6d ヘッダー修正
pick 193054e ファイル追加
pick 84gha0d README修正

やり直したら実行する

git commit --amend

次のコミットへ進む(リベース完了)

git reabase --continue

HEAD~
1番目の親を指定する。
HEADを基点にして数値分の親コミットまで指定する。

HEAD^
マージした場合の2番目の親を指定する。

rebase -i コマンドの一連の流れ

①git rebase -i コマンドで対話的リベースモードに入る

②修正したいコミットをeditにしてコミットエディタを終了する

③editのコミットのところでコミットの適用が止まる

④git commit --amendコマンドで修正

⑤git rebase --continueで次のコミットへ行く

⑥pickでとそのままのコミット内容を適用して次へ行く

コミットを並び替える、削除

# コミットを並び替える、削除
①8e4ghaOdのコミットを消す
②193054eを先に適用する
pick 193054e ファイル追加
pick gh21f6d ヘッダー修正

コミットをまとめる

# コミットを1つにまとめる
pick gh21f6d ヘッダー修正
squash 193054e ファイル追加
squash 84ghaOd README修正

コミットを分割する

# コミットを分割する
pick gh21f6d ヘッダー修正
pick 193054e ファイル追加
edit 84ghaOd READMEとindex修正
git reset HEAD^
git add README
git commit -m 'README修正'
git add index.html
git commit -m 'index.html修正'
git rebase --continue