【Git】1stコミットに対してコミット削除(強制取り消し)ができずに5分ほど躓いた話
表題の通り、最初のコミットに対し、コミットの強制取り消しができない(強制取り消しではなく、リバートを用いた取り消しならば問題なく実施できたはず)といったトラブルに遭遇したので、備忘録兼ねて記事を残しておきます。
まず、ローカルリポジトリで初コミット → GitHubへのPuhまで成功したものの、直後、Pushしたファイルが古いものであることに気づいた。
幸いにも自分専用のプライベートリポジトリを扱っていたため、リバートによるコミット取り消しではなく、reset --hardを使用したコミットの強制取り消し(リバートとは異なり、コミットを取り消した履歴自体が残らない)を行おうと考えた。
2回目以上コミットがされているリポジトリであれば git reset --hard HEAD^
コマンドはうまく機能するが、コミットが1度しかされていないリポジトリに対してこのコマンドを実行すると「Already up to date.」となり、うまくコミットの強制取り消しができない。
一応記載しておくと、HEAD^ではなくHEAD つまり、git reset --hard HEAD
を実施しても同様にダメ。
今回はGitHubを利用しており、1stコミットの強制取り消しをすることに時間を奪われるのも微妙なので、下図の通り、GitHubの「Delete this repositoryボタン」を押すことで一度リポジトリを削除してからリポジトリを作り直すことにした。
(1回分のコミットしかないため、リポジトリそのものを削除してしまった方が早いと判断した)
今回はGitHubの「Delete this repository」ボタンに助けられた訳だが、このボタンを押すと、どのようなgitコマンドが実行されるのかを把握しておきたかったので、軽く調査してみた。
どうやら以下のコマンドが実施されるようなので、同コマンドを実行した場合にもリポジトリを削除することができそう。
- rm -rf <repository-folder>/.git # ローカルリポジトリの削除
- gh repo delete <repository-name> # GitHubから指定したリポジトリを削除
注意書き:今回のケースでは自分専用のローカルリポジトリを対象にしていたためにgit reset --hard HEAD^
を何の躊躇いもなく実行していたが、共同開発をしているリポジトリにおいては言うまでもなく、気軽にgit reset --hard HEAD^
を実行しないようにすること。(共同開発時には、git revertを使うのが一般的)
Discussion