- 公開日
githubにgit pushした変更の取り消し
「間違ったコミットをリモートにpushしちゃった!取り消したい!」ってときの操作。上イメージのようにgithubに誤ったpushをした場合を想定して解説してみます。
下記コマンド打つ。
$ git rebase -i HEAD~2
HEAD~2
は「直前の2つのコミットを修正対象とする」という意味になります。3つ前のコミットを取り消したい場合はHEAD~3
としてください。するとこんな画面が出てくる。
取り消したいコミットを削除して保存します。この場合、2行目のコミットが誤りなので2行目を削除して保存します。うまくいくとこんなメッセージ。
Successfully rebased and updated refs/heads/master.
これで準備はOK。でも、その状態で普通にプッシュするとこんなエラーで受け付けてくれない。
$ git push ! [rejected] master -> master (non-fast-forward) error: failed to push some refs to 'xxxx"
これは一度リモートにpushした変更を書き換えようとしているためにrejectされています。今回の場合、この変更は意図したものなので-f
オプションを付けて強制的にpushします。
$ g push -f + 4f82199...2778ead master -> master (forced update)
以上になります。
ローカルの変更を残したい場合...
上手順を行うと、リモートの変更も失われますしローカル上の変更も失われます。ローカル上のコミットを残して、githubのpushを取り消したいときは下記のコマンド。
$ git push -f origin HEAD^:master + 91700fc...2778ead HEAD^ -> master (forced update)
上記の場合、HEAD^
(最新の状態から1つ前の状態)へと強制pushしているので、最新コミットの1つがgithubから失われます。