開発ブログ

WWWクリエイターズが送る、Git、CSS、HTML、コマンドライン、Macの便利機能など、開発に関する役立ち情報発信します。気まぐれに更新。

git push の取り消し方法。

最終更新:2017-07-09 by Joe

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

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

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

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

間違いは誰にでもあります。それでは、取り消しの方法です。

git pushの取り消し方法

解決の方針ですが、大きく2つの方針があります。

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

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

Pushを無かったことにする

まずは悪魔の囁き(?)から😈ですが、基本的には、まず、ローカルでコミットを強制的に書き換えます。コミットが一つだけなら、amendオプションでサクッと修正できます。

コミットが複数あるなら、rebase -iで履歴を書き換えてしまいましょう。

さて、上記の2つは、いずれも既存のコミットを「削除し、新しい別のコミット作成する事になります。すなわち、コミットIDのハッシュが変わります。

これらの新しいコミットを pushしようとすると、リモートにある、以前のコミットとコンフリクトしてpushできません。(エラーで怒られます)、「強制」オプションを付けます。

はい、これでリモートのmasterを修正できました。この修正の間に、masterが誰にも見られていない事に注意しましょう。間違ったmasterから、ブランチを開始したチームメンバーがいたら、きっと怒られます。素早く、素早く。。

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

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

間違いを取り消す revert コミットを作成

こちらが本来、教科書通りで安全な方法です😇

複数のコミットなら・・

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

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

以上です。

教科書通りの取り消し方法ですが、どうしても履歴が見にくくなってしまうのが残念です。一人開発においては私はほぼ使いません・・。

こちら参考です:

参考リンク