📖

gitの初回コミットを消したいとき

2022/08/11に公開

結論

git update-refを使う。

背景

2回目〜最新までのコミットを取り消したいときは、git resetが使える。

$ git reset --soft ^HEAD # 最新のコミット履歴だけを消す
$ git reset --hard ^HEAD # 最新のコミット履歴を消し、変更内容も元に戻す

しかし、初回のコミットの取り消しは、git resetではできない。

$ git reset --soft HEAD^
fatal: ambiguous argument 'HEAD^': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

初回コミットの消し方

初回のコミットを消すときは、git logでコミット履歴が1つだけの状態で、git update-ref -d HEADを使用する。

$ git update-ref -d HEAD
$ git log
fatal: your current branch 'main' does not have any commits yet

git help -aで説明を見ると、このようになっている。

update-ref           Update the object name stored in a ref safely

update-refとは

元々update-refは、ブランチの参照先を変更する用に使うらしい。
gitを普段使いしている分にはなかなか使わないコマンドだと思う。

$ git update-ref refs/heads/master 1a410efbd13591db07496601ebc7a059dd55cfe9

参考

Discussion