鶏口牛後な日々

心の赴くまま、やりたいことを仕事に。

gitでpushしたものを取り消したい

gitでリモートレポジトリにpushまでして、やっぱりローカルでもう一度直したい、ということはありませんか。 そういう時には、pushを取り消したいですよね。

まず、pushしたcommitのハッシュ値git log などで確認しておきましょう。

最短距離でやる方法のメモ。 色々やり方はあるみたいなので、他の方法を知りたい人は調べてください。

git revert

git revert ハッシュ値

git revert すると、「一度はpushしたけど、それをrevert(元に返した)よ」というログが残されます。

上のコマンドを打つと、そのログが開いて、内容を自分でvimで編集することができます。

別に色々描きたいわけでないならば、 :q で閉じてしまってOK。

あとは、git revertしたことを再度pushして、リモートレポジトリに教えてあげればOK.

git push origin ブランチ名  <-最初にpushした時と同じコマンドでoK

これですでに、pushは閉じられています。

pushすると出てくる結果に表示されるURL(Merge requestを送るページ)を試しに開くと、送れなくなっていると思います。

pushが取り消されたからです。

resetとの違い

よく git revert はログを残し、 git reset はログを残さない、と聞きました。

まだリモートレポジトリ関連の操作を、 git reset 使ってやったことがないので、単純にapple to appleな比較ではないと思いますが、確かに git revert はpushを取り消したよ、というログが残りました。

一方で、ローカルのコミットを取り消す時によく使う git reset はlogからも消えてしまいます。

使う上で、複雑なことをする場合は、より気をつけようと思いました。