誤って git commit してしまった場合、git reset コマンドでコミット前の状態に戻すことができます。
コミット を 取り消すコマンド
直前のコミットを取り消し、git add された状態に戻すgit reset --soft HEAD^
直前のコミットを取り消し、変更内容もすべて元に戻す
git reset --hard HEAD^
誤って git reset --hard HEAD^ してしまった場合
git reflog コマンドと git reset コマンドを使用すると元に戻すことができます。- 失敗したときに元に戻せるよう、該当のフォルダをコピーしておきます。
-
git reflog コマンドを実行し、戻したい地点のハッシュ値を調べます。
$git reflog 66708b4 (HEAD -> main) HEAD@{0}: reset: moving to HEAD^ b1a99c2 HEAD@{1}: commit: commit-2 66708b4 (HEAD -> main) HEAD@{2}: commit (initial): commit-1
- 1行目: git reflog コマンドを実行しています。
- 2行目: 間違って実行した git reset --hard のログです。
- 3行目: 消してしまった コミットです。この地点に戻したいので、このハッシュを使用します。
-
git reset コマンドを実行し、コミットを復元します。
git reset に渡す ハッシュ値に誤りが無ければ、この操作で git reset --hard 前の状態に戻ります。
$git reset b1a99c2 Unstaged changes after reset: D test2.txt
- 1行目: git reflog で調べたハッシュ値を指定し、 git reset を実行しています。
コミットの取り消し例 (git reset --soft HEAD^)

$git log --oneline
6c9ebdb (HEAD -> main) commit-2
5c3fc00 commit-1
$git reset --soft HEAD^
$git log --oneline
5c3fc00 (HEAD -> main) commit-1
$git status
On branch main
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: test2.txt
- 1行目: git log で、コミット状況を確認しています。
- 2行目: 取り消したいコミットです。
- 5行目: コミットを取り消しています。
- 7行目: 1行目 と同様に、コミット状況を確認しています。commit-2 が消えています。
- 10行目: ファイルの状態を確認しています。 commit-2 の変更が残っています。
コミットの取り消し例 (git reset --hard HEAD^)

$git log --oneline
01c24f2 (HEAD -> main) commit-2
ebc964a commit-1
$git reset --hard HEAD^
HEAD is now at ebc964a commit-1
$git log --oneline
ebc964a (HEAD -> main) commit-1
$git status
On branch main
nothing to commit, working tree clean
- 1行目: git log で、コミット状況を確認しています。
- 2行目: 取り消したいコミットです。
- 5行目: コミットを取り消しています。
- 8行目: 1行目 と同様に、コミット状況を確認しています。commit-2 が消えています。
- 11行目: ファイルの状態を確認しています。ファイルは何も変更されていない状態です。
git reset --hard HEAD^ の取り消し例

$git log --oneline
ebc964a (HEAD -> main) commit-1
$git reflog
ebc964a (HEAD -> main) HEAD@{0}: reset: moving to HEAD^
01c24f2 HEAD@{1}: commit: commit-2
ebc964a (HEAD -> main) HEAD@{2}: commit (initial): commit-1
$git reset 01c24f2
Unstaged changes after reset:
D test2.txt
$git log --oneline
01c24f2 (HEAD -> main) commit-2
ebc964a commit-1
- 1行目: git reset --hard HEAD^ 後の状態です。commit-2 が消えています。
- 4行目: git reflog で ログを確認します。
- 5行目: git reset --hard HEAD^ の ログです。
- 6行目: 消えてしまった、commit-2 のログです。ここに戻したいので、このハッシュを使用します。
- 9行目: commit-2 のハッシュ値を指定し、コミットを復元しています。
- 13行目: commit-2 が元に戻っています。
検証環境
- Git version 2.31.1.windows.1
- Microsoft Windows 10 Pro Version 20H2 OS Build 19042.928 Experience: Windows Feature Experience Pack 120.2212.551.0