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
は本当に全部消すので要注意!不安ならsoft
かmixed
を使う。
1-3. 複数コミット前に戻したい/なかったことにしたい
方法:git reset
で戻したいコミット数分HEADを戻す
-
例:2つ前に戻すなら
HEAD~2
git reset --soft HEAD~2
🛰️ ケース2:push済み(リモートにも反映してしまった場合)
2-1. コミットを修正したい(push後に内容やメッセージのミスに気付いた)
方法:--amend
やreset
で履歴修正 → git push --force-with-lease
-
修正したい内容を編集し、
git commit --amend
やgit rebase -i
で直す -
変更後にforce push(
--force-with-lease
推奨)でリモートを書き換え
# 例:直前コミット修正→強制push
git commit --amend
git push --force-with-lease
この方法は他の人がそのブランチをpullして作業していない場合のみ推奨。履歴が書き換わるので、他の人の作業に影響が出る可能性あり!
2-2. pushしたコミットを削除・なかったことにしたい
方法:git reset
→ git push --force-with-lease
-
消したいコミット数だけ
git reset --hard HEAD~n
-
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 --amend
やreset
で自由に修正・削除できる -
push後は、
revert
で安全に取り消し、履歴ごと書き換えたい場合のみ--force-with-lease
で強制push -
チームで作業している場合は、履歴書き換えは要注意・必ず事前に連絡!