開発ブログ
Git、CSS、HTML、正規表現など、入門者がつまづきそうなポイントを中心に、役立ち情報発信します。。

git push の取り消し方法。

最終更新:2018-04-05 by Joe

Gitで勢い余って間違ったコミットを git push してしまった時、それを取り消す方法です。

git push の取り消し方法

あ、間違って push しちゃった・・・

Git を使っていると、間違ってgit pushしてしまって、それを取り消したくなるようなケースは、時々あります。

  • 間違えて master ブランチで作業して、中途半端なコミットを作ってしまった。しかもなぜか、間違って push してしまった・・・。
  • チームで共有しているリモートレポジトリに push したが、思いっきりバグを含んでいたので、いったん取り消したい。

間違いは、誰にでもあります。間違ったらやり直せば良いのです。

git push したコミットを取り消す

それでは取り消しの方法です。解決の方針ですが、大きく2つの方針があります。

git push したコミットの取り消し方法の選択肢

  1. 😈過ちを隠す :push したコミットを取り消して、無かったことにする
  2. 😇過ちを認める:間違いコミットを打ち消す「revertコミット」を作成して、追加 push する

天使と悪魔のささやき、というわけではないですが・・・、これらの手段は、状況によって使い分ける事になるでしょう。

方法1pushしたコミットを削除する

まずは悪魔の囁き(?)から😈ですが、まず、ローカルでコミットを強制的に書き換えます。直前のコミットを取り消すだけならHEAD^を指定して、ブランチの先頭を一つ昔の戻します。

// 直前のコミットを取り消す
git reset --hard HEAD^

この書き換えたブランチを pushしようとすると、リモートにある、以前のコミットとコンフリクト(リモートより歴史が短いブランチをプッシュしようとしている)してpushできません(エラーで怒られます)。

ここは強制させるオプションである「-f 」を付けて強引に上書きします。

// 強制的にPushする
git push -f origin master

はい、これでリモートのmasterを修正できました。簡単ですね。

注意点:

この修正の間に、push したリモートの master が誰にも見られていない事に注意しましょう。間違った master ブランチの先頭コミットから別の開発を開始してしまったチームメンバーがいたら、きっと怒られます。ばれないように、素早く、素早く行いましょう😈。。

修正するのが、masterなどの共有された統合用のブランチではなく、トピックブランチだったり、一人だけで開発しているときはけっこうバシバシ使ってOKです。使い方を間違えると危ないけど、パワフルなやり方、くらいに捉えています。

こちらはpushの強制に関する参考記事です:

方法2git  revert で取り消しコミットを作成する

こちらは比較的安全な取り消し方法です😇。変更を打ち消すgit revert コマンドを使います。下の2つは同義で、HEADでの変更を打ち消すコミットを作成し、その前のHEAD^と同じ状態を作ります。。

// 直前のコミットを打ち消すコミット
git revert
git revert HEAD

例えば、複数のコミットならこのようにも書けます。

// 最新をふくめ、過去4つ分のコミットを打ち消す
git revert HEAD~3

revertコマンドによって、過去のコミットをちょうど打ち消す、新しいコミットが追加されます。

あとは、push するだけ。新しいコミットなので、コンフリクトはしません、-f オプションは不要です。

git push origin master

以上です。

revert は過去の歴史を書き換えない、安全な取り消し方法ですが、どうしても不用意なコミットが増えて、履歴が見にくくなってしまうのが難点です。一人開発においては reset で取り消してしまったほうが分かりやすいので、revert はあまり使わないかもしれません。

こちら参考記事です:

git push の取り消しに関する参考情報

git push に関してです。

git revert の公式ドキュメントです。

閉じる