2023/04/26
intaractive rebaseを使いましょう。
gitでコミット分割の方法を調べたのでメモしておきます。
git log --oneline
83f52e6 (HEAD -> main) hoge
f1cae65 fuga
b8929a2 piyo
0fd0f4e hoge
945b51e fuga
18f60e3 piyo
d6b8ce8 poyo
下から2番目の18f60e3のコミットを分割したいとします。
このとき、18f60e3,d6b8ce8の2コミットをのちに入力できるように記憶しておきます。
git rebase -i d6b8ce8
とするとエディタが開き、そこには
pick 18f60e3 piyo
pick 945b51e fuga
pick 0fd0f4e hoge
pick b8929a2 piyo
pick f1cae65 fuga
pick 83f52e6 hoge
# Rebase d6b8ce8..83f52e6 onto d6b8ce8 (6 commands)
(以下省略)
のような記述がなされています。
今回いじりたいのは18f60e3なので、
edit 18f60e3 piyo
pick 945b51e fuga
pick 0fd0f4e hoge
pick b8929a2 piyo
pick f1cae65 fuga
pick 83f52e6 hoge
# Rebase d6b8ce8..83f52e6 onto d6b8ce8 (6 commands)
(以下省略)
と文頭のpickをeditに変え、保存して閉じます。
Stopped at 18f60e3... piyo
You can amend the commit now, with
git commit --amend
Once you are satisfied with your changes, run
git rebase --continue
と出力されれば成功。18f60e3が編集可能となりました。
現在、18f60e3での変更はヒストリー上にあるので、コミットし直すためにワーキングディレクトリまで引き戻します。
git reset HEAD~
git add, git commitで変更をコミットします。
ここでコミットを小分けにすることで、当初の目的であるコミット18f60e3の分割が叶います。
コミットが完了したら、rebaseで編集モードを終了し、HEADへチェックアウトします。
git rebase --continue
Successfully rebased and updated refs/heads/main.
過去のコミットを分割しなおすことができました。