git でコミットの整理

master ブランチで直接色々と変更してしまった状態。
master に対する変更をいくつかの塊に分けて、それぞれを 1 コミットにまとめたい。
注:この方法は正しくないかもしれないし、もっと簡単な方法があるかもしれない。

塊のブランチを作成

まず、基底とするコミット (C0) へ戻る

git checkout C0

塊のブランチ (B0) を作成して、塊にしたいコミットを master からひっぱってくる。

git checkout -b B0
git cherry-pick C1
git cherry-pick C2
git cherry-pick C5

C1 〜 C5 のコミットをまとめる。

git rebase -i HEAD^4
pick C0
pick C1
pick C2
pick C5

pick C0
pick C1
squash C2
squash C5

とする。
エディタが起動するので、新しいコミットメッセージを入力。


同様に好きなだけ塊のブランチを作成。

master にコミットしていく。

master の HEAD を基底のコミットにする。

git reset --hard C0

塊のブランチからコミットを取り込む。

git cherry-pick B0

git rebase -i でおかしくなったときには慌てず騒がず git rebase --abort 。
何か間違えたら、git reflog で戻りたい操作の時点を確認して、git reset --hard HEAD@{5} など。