[Git] 最初のコミットを含めてrebase -iする方法

こんにちは。サービスグループの武田です。最初のコミットを含めてrebase -iしたい場合は、--rootオプションを付けましょう。
2021.06.22

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは。サービスグループの武田です。

結論だけ知りたい方!--rootだけ覚えてください!

$ git rebase -i --root

Gitを使っているとコミットの分割や統合が簡単に行えます。開発時は雑にコミットしておいたものを、PR前に整理するという方も多いのではないでしょうか。

そんな折に大活躍するコマンドがrebase -iですね。これを利用することで、歴史改変が簡単に行えます。そういえばVivy -Fluorite Eye’s Song-がおもしろいですね。見ていない方はぜひ。アマプラでも見れます。

さてそんなrebase -iなのですが、最初のコミットを対象にする場合、追加のオプションが必要となります。簡単に確認してみましょう。

$ mkdir git_rebase_test && cd $_
$ git init
$ touch README.md
$ git add .
$ git commit -m 'init commit'

$ echo '# git rebase' > README.md
$ git add .
$ git commit -m '2nd commit'

2つのコミットを対象にrebaseしてみます。

$ git rebase -i @~2
fatal: invalid upstream '@~2'

不正な指定ということでエラーとなってしまいました。ちなみにgit rebase -i @~1だと次のようになり、意図したものにはなりません。

pick 3823264 2nd commit

# Rebase b194806..3823264 onto b194806 (1 command)

最初のコミットからrebaseするには、コミットハッシュなどの指定ではなく--rootオプションを指定します。試してみます。

$ git rebase -i --root

次のようなエディット画面が立ち上がります。

pick b194806 init commit
pick 3823264 2nd commit

# Rebase 3823264 onto ec23e56 (2 commands)

先ほどと異なり最初のコミットも含まれていますね。あとはいかようにもしてください。

さいごに

今期は東京リベンジャーズもタイムリープものですね。そちらもおもしろいですよ。