Gitで最初のコミットをどうにかする

最初のコミットの内容を変更したい

Gitで最初のコミットの内容を変更したいと思って git rebase -i <最初のコミット> とやっても、最初のコミットは出てきません。

% git log --oneline
4f4f42c 二番目のコミット
9d4876c 最初のコミット

% git rebase -i 9d4876c
pick 4f4f42c 二番目のコミット

このような場合は git rebase -i --root を指定すると良いようです。

% git rebase -i --root
pick 9d4876c 最初のコミット
pick 4f4f42c 二番目のコミット

最初のコミットの前に別のコミットを入れたい

さっきと同様に git rebase -i --root で開いて、最初のコミットを edit にします。

% git rebase -i --root
edit 9d4876c 最初のコミット
pick 4f4f42c 二番目のコミット

ここで何か変更して、git commitgit rebase --continue すると、最初のコミットの次に入ります。

% git log --oneline
94d6512 二番目のコミット
1b424b1 何か変更
14ad5e8 最初のコミット

そしてもう一度 git rebase -i --root で、コミットの順番を並び替えると、最初のコミットの前に移動できます。

% git log --oneline
c6e0a13 二番目のコミット
71e774a 最初のコミット
828ea78 なにか

または親を持たないブランチを作成して、それに rebase するという方法もあります。

% git checkout --orphan hoge            # 親を持たないブランチ
% git reset                             # ファイルが stage 状態になってるので reset
% git commit --allow-empty -m 'なにか'  # 空コミット
% git clean -fdx                        # master にあるファイルが残っているのでクリア
% git checkout master
% git rebase hoge                       # master を hoge から派生するように rebase
% git log --oneline
5cc41ab 二番目のコミット
b87ca1f 最初のコミット
0544410 なにか

ほかにもいい方法があるかもしれません。