git で一つのコミットを分割する2019年08月28日 13時03分01秒

git rebase -i を用いると、コミット済みの変更も更新できる。関係ない部分の変更を間違って一つのコミットにしてしまった時や、操作を誤って squash してしまったり、後々になってファイル構成を変えるために分割したくなったりなど。

git split 等があれば良いと思ったことはあるが残念ながら無い。ちょっと手間取るが、rebase と reset を使って分割できる。なお、間違えたら悲惨な目になるので、レポジトリの完全バックアップは忘れないようにしたい。

まずは、一度全部コミットを取消にして、二回に分けてコミットし直す時のコマンド。

% git rebase -i <sha または --root>
% git reset HEAD^
% git add <files>
% git commit -m '1st'
% git add <files>
% git commit -m '2nd'
% git rebase --continue
次に、一部のコミットだけを取消にして、二つ目のコミットを作成する方法。
% git rebase -i <sha または --root>
% git reset HEAD^ -- <files>
% git add <files>
% git commit -m '2nd'
% git rebase --continue
どちらかが便利かはファイルの数に依る。