【完全ガイド】Gitのコミット・プッシュを取り消す方法

【完全ガイド】Gitのコミット・プッシュを取り消す方法

当ページのリンクには広告が含まれています。

記事の文字数:3619

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


スポンサーリンク

開発中に「あっ、間違ったコミットをしてしまった!」という経験は誰にでもあります。しかし、心配は不要です。Gitには状況に応じた柔軟なコミット取り消し機能が用意されています。 本記事では、実際の開発現場でよく遭遇するシナリオごとに、最適なコミット取り消し方法を解説します。

📋 本記事の概要(クリックして表示)

🏠 ローカル作業

git reset系コマンドを使用

🌐 リモート共有

git revertで安全に取り消し

👥 チーム開発

履歴保持を最優先に

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

git reset --softgit reset --mixed を使うことで、コミットを取り消した後も変更を保持することができます。 開発中に誤ってコミットしてしまった場合、多くのケースで変更内容自体は正しく、単にコミットのタイミングやメッセージが不適切だったというパターンがあります。このような場合、git resetコマンドが威力を発揮します。

git reset --soft:即座に再コミット可能

開発中に誤ってコミットしてしまった場合、git reset --soft を使用すると簡単に取り消すことができます。コミットを取り消し、変更をステージング状態に保持します。

実行コマンド
git reset --soft HEAD~1

このコマンドは、最新のコミットを削除しつつ、ファイルの変更内容をステージングエリア(インデックス)に保持します。これにより、すぐに修正して再コミットすることが可能です。つまり、git commitを実行すれば即座に再コミットできる状態になります。

使用場面

  • コミットメッセージを修正したい
  • コミットに含めるファイルを追加したい
  • すぐに再コミットしたい

git reset --mixed:変更を再編集したい場合

コミットを取り消し、変更をワークツリーに戻したい場合はgit reset --mixedコマンドを実行します。

実行コマンド
git reset --mixed HEAD~1

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

使用場面

  • コミット内容を再度見直したい
  • 一部のファイルだけをコミットしたい
  • 変更をさらに編集してからコミットしたい

--soft--mixedの使い分けのコツ

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

  • git reset --soft HEAD~1 は、最新のコミットを取り消し、変更を ステージングエリアに保持 します。そのため、すぐに再コミットが可能です。
  • git reset --mixed HEAD~1 は、最新のコミットを取り消し、変更を ステージングエリアから解除し、ワークツリーに残します。再コミットする前に、必要なファイルを再度 git add する必要があります。
オプション変更の保存場所次のアクション適用場面
--softステージングエリアgit commitのみコミットメッセージ修正、ファイル追加
--mixedワークツリーgit addgit commit変更内容の再編集、選択的コミット

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

実践的な判断基準

  • 変更内容に満足している → --soft
  • 変更内容を再検討したい → --mixed

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

チーム開発において、過去の特定のコミットに問題があることが判明した場合、履歴を改変せずに修正する必要があります。このように過去の特定のコミットを取り消す場合は、git revert を使用します。

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

git revertによる安全な取り消し

指定したコミットを取り消す新しいコミットを作成します。

コマンド構文
git revert --no-edit <コミットID>

git revertの特徴

  • 元のコミット履歴を保持
  • 取り消し操作も履歴として記録
  • チーム開発で安全
  • いつでも元に戻せる

コミットIDの確認方法

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

実行コマンド
git log --oneline

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

出力例
3a5b9f2 (HEAD -> main) feat: ユーザー認証機能を追加
1c2d3e4 fix: バリデーション処理のバグを修正
9f8e7d6 docs: README.mdを更新

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

バグ修正のコミット(1c2d3e4)を取り消す場合
git revert --no-edit 1c2d3e4

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

リモートリポジトリにプッシュした後に誤ったコミットを取り消したい場合は、git reset --hardgit push --force を組み合わせて使用します。 リモートリポジトリにプッシュした後のコミット取り消しは、他の開発者への影響を考慮する必要があります。

強制プッシュによる取り消し(非推奨)

git reset --hard は、指定したコミット以降の履歴を完全に削除し、ローカルの変更もすべて破棄します。

ステップ1: ローカルのコミット履歴を削除
git reset --hard HEAD~1

その後、git push --force でリモートリポジトリを上書きします。
ただし、これは他の開発者の作業に影響を与える可能性があるため、使用する際は注意が必要です。

ステップ2: リモートリポジトリを強制的に更新
git push --force

重要な注意事項

  • 他の開発者が同じブランチで作業している場合、その作業に影響が出る可能性があります
  • チームメンバーとの事前相談が必須
  • 可能であればgit revertの使用を検討

git revertでコミットを打ち消す(推奨)

より安全な代替案として、git revertで履歴を保持しながら取り消しを実行する、以下手順を推奨します。

実行コマンド例
git revert --no-edit <コミットID>
git push origin <ブランチ名>

HEAD記法で過去のコミットを指定する

GitのHEAD記法を理解することで、より柔軟にコミット操作を行えます。 例えばHEAD~1 は、現在のブランチの最新のコミット(HEAD)から 1つ前のコミット を指します。直前のコミットを取り消す場合に HEAD~1 を指定すると、現在の最新コミットが削除または変更されます。

HEAD記法の基本

  • HEAD → 現在の最新コミット
  • HEAD~1 → 1つ前のコミット(直前のコミット)
  • HEAD~2 → 2つ前のコミット
  • HEAD~n → n個前のコミット

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

HEADの使用例

過去3つのコミットを取り消す(ステージングに戻す)
git reset --soft HEAD~3
過去5つのコミットを取り消す(ワークツリーに戻す)
git reset --mixed HEAD~5

Git取り消し方法まとめ

Gitのコミット取り消しは、状況に応じて適切な方法を選択することが重要です。

判断基準

  • ローカルでの作業git reset系コマンド
  • リモートとの共有git revert
  • チーム開発 → 履歴を保持する方法を優先

正しい方法を選択することで、安全かつ効率的なバージョン管理が可能になります。不安な場合は、まずローカルでテストするか、バックアップブランチを作成してから操作することをお勧めします。

状況別コマンド早見表

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の履歴を管理しましょう!

Gitユーザにお勧めの本

いちばんやさしい
Git&GitHubの教本 第3版
人気講師が教える
バージョン管理&共有入門
「いちばんやさしい教本」シリーズ

新品価格
¥2,178 から
(2025/5/10 20:56時点)

改訂2版
わかばちゃんと学ぶ Git使い方入門

新品価格
¥2,208 から
(2025/5/10 20:58時点)

独習Git

新品価格
¥3,247 から
(2025/5/10 20:59時点)


以上で本記事の解説を終わります。
よいITライフを!
Scroll to Top