リモートリポジトリのコミットを取り消す

概要

リモートリポジトリにあるmasterブランチのコミットを取り消す場合を考えます。
手順としては以下のような感じになります。

  1. リモートリポジトリからmasterをpullしておく
  2. リモートリポジトリにバックアップとしてmaster_bakブランチを作成する(オプション)
  3. ローカルにあるmasterブランチに対してコミットを取り消す作業をする
  4. リモートリポジトリにあるmasterブランチを削除する
  5. ローカルにあるmasterブランチをリモートリポジトリにpushする
  6. 問題なければmaster_bakブランチを削除する(オプション)

リモートリポジトリからmasterをpullしておく

普通にpullしてきます。

$ git pull origin master

pullしてきたmasterに対して、この後コミット取り消し作業を行います。

リモートリポジトリにバックアップとしてmaster_bakブランチを作成する(オプション)

念のため、バックアップを残しておきたい場合は、以下のようにしてmaster_bakを作成します。

$ git push origin master:master_bak

ローカルにあるmasterブランチに対してコミットを取り消す作業をする

git logとかを見て、戻したいところまでのハッシュ値やタグなどを調べます。
そして、git resetで巻き戻します。

$ git reset {ハッシュ値やタグ}

リモートリポジトリにあるmasterブランチを削除する

以下のコマンドで、リモートリポジトリにあるmasterブランチを削除します。

$ git push origin :master

gitのバージョンによっては、デフォルトでこの処理は拒否されます。
そうした場合は、リモートリポジトリにあるconfigファイルに以下のような設定を追加します。

[receive]
denyDeleteCurrent = 0

ローカルにあるmasterブランチをリモートリポジトリにpushする

以下のようにして、リモートリポジトリに新しいmasterを作成します。

$ git push origin master

問題なければmaster_bakブランチを削除する(オプション)

以下のようにして、master_bakブランチを削除します。

$ git push origin :master_bak