2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

gitのInitial Commit(最初のコミット)を取り消す方法

Last updated at Posted at 2025-06-02

gitを使用してバージョン管理を開始する際、最初のコミットを作成した後に、何らかの理由でそのコミットを取り消したい、あるいは修正したいという状況が発生することがあると思います.
私はちょうど先日 認証ファイルをinitial commitしてしまい,対面申し訳ないことをしてしまいました🙇‍♂️
その対処として以下のコマンドを実行しましたが...

git reset --mixed HEAD^1

このように怒られました

fatal: ambiguous argument 'HEAD^1': unknown revision or path not in the working tree.

これが起きた理由も合わせて,本記事では,gitの最初のコミット(initial commitまたはroot commit)を取り消す具体的な方法と、その際に発生しやすいエラーおよび対処法について解説します.

git については以下の記事で紹介しています

(準備)Initial Commitの作成

まず、リポジトリを初期化し、最初のコミットを作成する標準的な手順を確認します.
任意のディレクトリでgitリポジトリを作成する

git init

変更差分(ファイルの作成)を作成する

touch sample.txt

addする

git add sample.txt

commitする

git commit -m "initial commit"

この時点での git log の出力は以下のようになります.

commit 000000000000000000000000000000000000000 (HEAD -> master)
Author: Your Name <your.email@example.com>
Date:   Mon Jun 2 10:30:00 2025 +0900

    initial commit

これで一般的な取り消し方であるgit resetを使用してみます

一般的なコミット取り消しコマンド git reset を使うと...?

直前のコミットを取り消す際によく用いられるコマンドは git reset です. 例えば、git reset --mixed HEAD^1 は直前のコミットを取り消し、変更内容をステージングエリアとワーキングエリアに残します. しかし、これをinitial commitに対して実行すると問題が発生します.

resetをしてみる

git reset --mixed HEAD^1

このようにエラーが起きる

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

このエラー fatal: ambiguous argument 'HEAD^1': unknown revision or path not in the working tree. は、Gitが HEAD^1 を解決できないことを示しています. HEAD^1(またはHEAD~1)は現在のコミット(HEAD)の親コミットを指しますが、initial commitには親コミットが存在しないためです.

コミットの親子関係のイメージ

Initial Commitを取り消す推奨方法

Initial commitそのものを削除し、リポジトリをコミットが存在しない初期状態に戻すには、git update-ref -d HEAD コマンドが適しています. このコマンドは、HEADが指す現在のブランチの参照を直接削除します.

git update-ref -d HEAD

実行後、git log を実行すると以下のようになります.

git log

git logの結果

fatal: your current branch 'master' does not have any commits yet

これは、現在のブランチにコミットが存在しないことを示しています. git status を確認すると、最初のコミットに含まれていたファイルはステージングされた状態に戻っています. これで、再度ファイルを編集したり、コミットメッセージを修正して新しいinitial commitを作成したりできます.

操作のイメージ:

注意点

  • ローカルリポジトリのみの場合:
    git update-ref -d HEAD はローカルリポジトリに対する操作です. リモートリポジトリにまだ何もpushしていない状態であれば、この方法で安全にinitial commitを取り消すことができます.
  • 既にリモートリポジトリにpush済みの場合:
    もしinitial commitを既にリモートリポジトリにpushしてしまっている場合、git update-ref -d HEAD でローカルのコミットを削除した後にリモートにpushするには、git push --force または git push --force-with-lease が必要になります. これはリモートリポジトリの履歴を強制的に書き換える操作であり、他の共同作業者がいる場合はコンフリクトや混乱を引き起こす可能性があるため、慎重に行う必要があります.
    チームで開発している場合は、履歴の書き換えについて事前に周知しましょう.
    代替案として、git revert でinitial commitの変更を打ち消す新たなコミットを作成することも検討できますが、initial commit自体は履歴に残ります.

このようにしてinitial commitを取り消すことができます.initlal commitで脳死でgit add .をしてしまわないようにするのは大事ですが,人間なのでやらかしてしまうでしょう.その際は落ち着いて注意点を確認しつつ本記事で紹介した方法で対処してください!

credentialファイルをcommitしないように気をつけましょう😭

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?