【Git】git push 取り消しの手順をわかりやすく解説
こんにちは、とまだです。
Gitでうっかり間違ったコミットをpushしてしまったことはありませんか?
「まだレビュー前なのに本番ブランチにpushしちゃった」 「機密情報が含まれたファイルを公開リポジトリに上げてしまった」
こんな経験、誰でも一度はあるのではないでしょうか。
今回は、git pushを取り消す方法を、実際の現場でよく使われる手順に沿って解説していきます。
git pushの取り消しには2つのアプローチがある
pushを取り消す方法は、大きく分けて2つあります。
どちらを選ぶかは「チームで共有しているか」「履歴を残すかどうか」で決まります。
1. 履歴に「取り消した記録」を残す方法(git revert)
チーム開発でメインブランチにpushしてしまった場合は、こちらの方法が安全です。
履歴に「このコミットを取り消しました」という新しいコミットが追加されます。
2. そもそもなかったことにする方法(git reset + force push)
個人開発や、まだ誰も見ていないブランチの場合は、こちらでもOKです。
コミット自体を履歴から消してしまいます。
それぞれ、日常生活に例えるとこんな感じです。
git revertは、間違って送ったメールに「訂正メール」を送るようなもの。 git reset + force pushは、送信前にメールを削除するようなもの。
では、具体的な手順を見ていきましょう。
方法1:git revertを使った安全な取り消し
最新のコミットを取り消したい場合の手順です。
# 現在のブランチを確認
git branch
# 最新のコミットを取り消す
git revert HEAD
# エディタが開くので、コミットメッセージを確認して保存
# 変更をリモートにpush
git push origin main
これで「取り消しコミット」が追加され、ファイルの状態は元に戻ります。
特定のコミットを取り消したい場合
# コミット履歴を確認
git log --oneline
# 取り消したいコミットのハッシュ値を指定
git revert abc1234
# pushして反映
git push origin main
コミットのハッシュ値は、git log
で表示される「abc1234」のような文字列です。
方法2:git reset + force pushで履歴ごと消す
こちらは少し強引な方法ですが、きれいに履歴を保ちたい場合に有効です。
# 1つ前の状態に戻す
git reset --hard HEAD~1
# 強制的にリモートを上書き
git push --force origin main
注意:この方法は危険です!
他の人がすでにpullしている場合、その人の作業に影響が出ます。
必ず以下を確認してから実行しましょう。
- 他の人がそのブランチで作業していないか
- 本当に消していいコミットか
- バックアップは取ったか
よくある質問と解決策
Q:複数のコミットをまとめて取り消したい
A:連続したコミットなら、範囲指定で取り消せます。
# 直近3つのコミットを取り消す
git revert HEAD~3..HEAD
# または、古い方から順に取り消す
git revert HEAD~2
git revert HEAD~1
git revert HEAD
Q:取り消したけど、やっぱり元に戻したい
A:revertしたコミットをさらにrevertすることで戻せます。
# revertコミットのハッシュ値を確認
git log --oneline
# そのrevertコミットを取り消す
git revert def5678
Q:機密情報を完全に削除したい
A:通常のrevertでは履歴に残ってしまうので、特別な対処が必要です。
この場合は、GitHubのドキュメントにある「機密データの削除」手順に従うか、リポジトリ管理者に相談しましょう。
実務でのベストプラクティス
1. pushする前に必ず確認
# pushする前にこれらのコマンドで確認
git status # 変更内容の確認
git diff --staged # ステージングの差分確認
git log --oneline -n 5 # 直近のコミット履歴確認
2. チームで作業している場合の連絡
誤ってpushしてしまったら、すぐにチームに連絡しましょう。
「mainブランチに誤ってpushしました。今から取り消します」
このひと言があるだけで、混乱を防げます。
3. ブランチ保護ルールの活用
GitHubやGitLabでは、mainブランチへの直接pushを禁止できます。
これを設定しておけば、そもそも事故を防げます。
まとめ
git pushの取り消しは、状況に応じて適切な方法を選ぶことが大切です。
チーム開発なら:git revertで履歴を残す 個人開発なら:git reset + force pushでクリーンに
どちらの方法も、焦らず落ち着いて実行すれば大丈夫です。
ミスは誰にでもあります。 大切なのは、適切にリカバリーする方法を知っておくことです。
この記事が、あなたのGit生活の助けになれば幸いです。
著者について

とまだ
フルスタックエンジニア
Learning Next の創設者。Ruby on Rails と React を中心に、プログラミング教育に情熱を注いでいます。初心者が楽しく学べる環境作りを目指しています。
著者の詳細を見る →