作ったばかりのリポジトリで作業中、first commitに別のコミットの内容を含めようと思って git rebase -i
したところ一番最初のコミットを対象にした作業ができなかったため、どうすればよいか調べました。
結論
--root
オプションを付与すればOKです。
状況
* 0ee5342 - (HEAD -> master) third commit (83 seconds ago) <kyo>
* 18ce4ba - second commit (2 minutes ago) <kyo>
* 1268ce4 - first commit (3 minutes ago) <kyo>
上記のようにcommitが3つある状態で third commit
を first commit
にsquashさせようと思い git rebase -i HEAD~3
したところ、以下のようなエラーが出たと言うものです。
fatal: Needed a single revision
invalid upstream HEAD~3
対応
調べたところ rebase
する際に --root
オプションを付けると first commitから全てのcommitを対象することができるとのことだったので git rebase -i --root
としたところ、無事first commitも含めて rebase -i
することができました。
余談
rebase時には既にgithubにpush済だったため、first commitをいじったことでログが以下のようにローカルとリモートで全く別のツリーになりました(画像はSourceTreeによるもの)。普段中々見ることのない状況だったので非常に面白い体験でした。
