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からも消えてしまいます。
使う上で、複雑なことをする場合は、より気をつけようと思いました。