メインコンテンツへスキップ

GitHubでコミットミスしたときの対処法

📝 はじめに

この記事では、GitHub(またはローカルGit)で誤ってコミットしたときの対処法をケース別に紹介します。
「ローカルコミットのみ」「リモートにもpush済み」など、状況ごとの手順や注意点を整理しています。


🚩 ケース1:ローカルでコミットしただけの場合(push前)

1-1. 直前のコミットを修正したい(ファイルやメッセージを直したい)

方法:git commit --amend

  • 直前のコミット内容やメッセージを修正して上書きできます。

  • pushしていなければ影響はありません。

# 例:ファイル修正後に
git add 修正したファイル
git commit --amend
# そのままエディタでメッセージも修正可能

--amendはコミットIDを新しくするため、履歴が変わります。push済みの場合は注意。


1-2. 直前のコミットをなかったことにしたい(完全に削除したい)

方法:git reset --soft HEAD~1 or git reset --hard HEAD~1

  • soft: 直前のコミットをなかったことにして、変更内容はそのまま作業ツリーに残る(やり直せる)

  • hard: 直前のコミットも、変更内容も完全になかったことにする(消える!注意)

# コミットだけ取り消し、編集内容は保持(やり直し可)
git reset --soft HEAD~1

# コミットも編集内容も消す(本当に全部キャンセルしたい場合のみ!)
git reset --hard HEAD~1

--hardは本当に全部消すので要注意!不安ならsoftmixedを使う。


1-3. 複数コミット前に戻したい/なかったことにしたい

方法:git resetで戻したいコミット数分HEADを戻す

  • 例:2つ前に戻すならHEAD~2

git reset --soft HEAD~2

🛰️ ケース2:push済み(リモートにも反映してしまった場合)

2-1. コミットを修正したい(push後に内容やメッセージのミスに気付いた)

方法:--amendresetで履歴修正 → git push --force-with-lease

  1. 修正したい内容を編集し、git commit --amendgit rebase -iで直す

  2. 変更後にforce push--force-with-lease推奨)でリモートを書き換え

# 例:直前コミット修正→強制push
git commit --amend
git push --force-with-lease

この方法は他の人がそのブランチをpullして作業していない場合のみ推奨。履歴が書き換わるので、他の人の作業に影響が出る可能性あり!


2-2. pushしたコミットを削除・なかったことにしたい

方法:git resetgit push --force-with-lease

  1. 消したいコミット数だけgit reset --hard HEAD~n

  2. git push --force-with-leaseでリモートを上書き

git reset --hard HEAD~1  # 1つ前に戻す例
git push --force-with-lease

複数人で作業している場合は、必ず相談・共有してから行うこと!


2-3. 特定のファイルやコミットだけを取り消したい(履歴は残したい)

方法:git revert

  • revertは、指定したコミットの「逆操作」を新たにコミットして履歴を壊さず元に戻す方法

git revert コミットID
git push

revertなら履歴は壊さずに取り消せるので、チーム開発やオープンソースで多用されます。


🧐 ケース3:コミットメッセージだけ直したい

3-1. 直前のメッセージだけ修正(未push)

git commit --amend

3-2. 複数コミット前のメッセージ修正(未push or push後で単独開発)

git rebase -i HEAD~3  # 3つ前まで編集する例
# pick→rewordでエディタで修正

修正後はpush前ならそのまま、push済みなら--force-with-leaseでpush。


🧑‍💻 ケース4:とりあえず一旦キャンセルしたい(一時退避)

方法:git stash

  • コミットする前に編集内容を一旦退避したい場合

git stash
# 必要になったら
git stash pop

📚 まとめ

  • push前commit --amendresetで自由に修正・削除できる

  • push後は、revertで安全に取り消し、履歴ごと書き換えたい場合のみ--force-with-leaseで強制push

  • チームで作業している場合は、履歴書き換えは要注意・必ず事前に連絡!