【完全ガイド】Gitのコミットを取り消す方法(3選)

【完全ガイド】Gitのコミットを取り消す方法(3選)

記事の文字数:2096

Gitのコミットを取り消す方法を詳しく解説します。直前のコミットの取り消しから特定のコミットの修正、プッシュ済みの変更の取り消し方法まで、具体的なコマンドとともに分かりやすく紹介します。適切な方法を選んで、安全にGitの履歴を管理できるようになりましょう。


スポンサーリンク

Gitで間違ったコミットをしてしまった場合でも、簡単に取り消す方法がいくつかあります。
本記事では、さまざまな状況に応じたコミットの取り消し方を詳しく解説します。

1.直前のコミットを取り消す

git reset --softgit reset --mixed を使うことで、コミットを取り消した後も変更を保持することができます。

git reset --softによる取り消し

開発中に誤ってコミットしてしまった場合、git reset --soft を使用すると簡単に取り消すことができます。

コミットを取り消し、変更をステージング状態に戻す
git reset --soft HEAD~1

このコマンドは、最新のコミットを削除しつつ、ファイルの変更をそのままステージングエリア(インデックス)に残します。これにより、すぐに修正して再コミットすることが可能です。

git reset --mixedによる取り消し

コミットを取り消し、変更をワークツリーに残す
git reset --mixed HEAD~1

git reset --mixed は、コミットを取り消した後、変更をワークツリーにそのまま残し、ステージングエリア(インデックス)から削除します。これにより、変更を再度編集してからコミットすることが可能です。

--soft--mixedの違い・使い分け

git reset --softgit reset --mixed はどちらもコミットを取り消すコマンドですが、変更の扱いが異なります。

  • git reset --soft HEAD~1 は、最新のコミットを取り消し、変更を ステージングエリアに保持 します。そのため、すぐに再コミットが可能です。
  • git reset --mixed HEAD~1 は、最新のコミットを取り消し、変更を ステージングエリアから解除し、ワークツリーに残します。再コミットする前に、必要なファイルを再度 git add する必要があります。

変更をすぐにコミットし直したい場合は --soft、変更を再編集したい場合は --mixed を使用すると便利です。

2.特定のコミットを取り消す

過去の特定のコミットを取り消す場合は、git revert を使用します。

コミットを取り消す
git revert --no-edit <コミットID>

git revert は指定したコミットIDを「取り消す新しいコミット」を作成するため、履歴を保持しながら変更を打ち消すことができます。これは、チーム開発において履歴を改変せずに修正を適用したい場合に便利です。

コミットIDの確認方法

特定のコミットを取り消したい場合は、そのコミットのID(ハッシュ値)を確認する必要があります。以下のコマンドを使用すると、コミット履歴とともにコミットIDを確認できます。

コミット履歴を表示
git log --oneline

このコマンドを実行すると、以下のような出力が表示されます。

3a5b9f2 修正: バグ修正
1c2d3e4 追加: 新機能の実装
9f8e7d6 初回コミット

ここで表示される 3a5b9f21c2d3e4 がコミットIDです。特定のコミットを git revert などで取り消す際に、このIDを使用します。

コミットIDを指定して取り消す
git revert --no-edit 3a5b9f2

3.プッシュ済みのコミットを取り消す

リモートリポジトリにプッシュした後に誤ったコミットを取り消したい場合は、git reset --hardgit push --force を組み合わせて使用します。

①直前のコミット履歴を完全に削除
git reset --hard HEAD~1
②リモートリポジトリに反映
git push --force

git reset --hard は、指定したコミット以降の履歴を完全に削除し、ローカルの変更もすべて破棄します。
その後、git push --force でリモートリポジトリを上書きします。
ただし、これは他の開発者の作業に影響を与える可能性があるため、使用する際は注意が必要です。

HEAD~1の補足

各コマンドで指定しているHEAD~1について補足します。
HEAD~1 は、現在のブランチの最新のコミット(HEAD)から 1つ前のコミット を指します。例えば、直前のコミットを取り消す場合に HEAD~1 を指定すると、現在の最新コミットが削除または変更されます。

  • HEAD~1 → 直前のコミット
  • HEAD~2 → 2つ前のコミット
  • HEAD~3 → 3つ前のコミット

このように、HEAD~nn を増やすことで、過去の特定のコミットに戻ることができます。

Git取り消し方法まとめ

Gitでは、さまざまな方法でコミットを取り消すことができます。本記事で紹介したコマンドをまとめると以下の通りになります。

用途コマンド意味
1a.直前のコミットを取り消すgit reset --soft HEAD~1直前のコミットを取り消し、変更をステージングエリアに保持する
1b.直前のコミットを取り消すgit reset --mixed HEAD~1直前のコミットを取り消し、変更をワークツリーに残す
2.特定のコミットを取り消すgit revert <コミットID>指定したコミットを打ち消す新しいコミットを作成する
3.プッシュ済みのコミットを取り消すgit reset --hard HEAD~1
git push --force
直前のコミットを完全に取り消し、変更履歴も削除する
強制的にリモートリポジトリに変更を適用する
※他開発者への影響もあるので使用時は要注意

適切な方法を選んで、安全にGitの履歴を管理しましょう!


以上で本記事の解説を終わります。
よいITライフを!
スポンサーリンク
Scroll to Top