Gitのリベート手順についてまとめてみた

間違えてプッシュしてしまった、マージコミットをプッシュしてしまった…。
そんなときが結構あるので、コミットの取り消しを行うリベートの方法をまとめた。

あるコミットだけを取り消したいとき

どんな状況?

基本的には以下の状況が多い。

  • ブランチのチェックアウトからもう間違っていて、そのままコミット&プッシュしていたパターン
  • だいぶ後になって、間違っているコミットがあることに気づいたパターン

どうやって対処するか?

まずは、Gitでクローンしたローカルのリポジトリへ移動する。

f:id:mediator1994:20200412175839p:plain
リベートしているリポジトリへ移動する

リベートしたいブランチをチェックアウトして、リベートしたいコミットIDを探す。 git logのコマンドで履歴を見るとやりやすい。 今回の場合は赤枠の部分をリベートする。

f:id:mediator1994:20200412180347p:plain
リベートしたいコミットのIDを探す

IDが分かれば、以下のコマンドを実行すれば、リベートしたというコミットを作ることができる。
git revert commitID
コマンドを実行すると、以下のコミットが作成される。後はこれをリモートへとプッシュすればよい。 f:id:mediator1994:20200412180708p:plain

EclipseとGitを連携できているので、Eclipseの方で履歴を確認してみる。

ちゃんとリベートのコミットができているか確認する。

リベートのコミットができていたら、これをプッシュすればいい。

f:id:mediator1994:20200412181407p:plain
Revert ○○のコミットがあれば、リベートはできている。

プッシュしたら、GitHubの方でコミットが完了しているかを確認しよう。

f:id:mediator1994:20200412181533p:plain
リベートが完了

マージコミットを取り消したいとき

どんな状況?

基本的には以下の状況が多い。

  • マージするブランチを間違っていた。
  • マージした2つのブランチのどれかが最新になっていなかった。

どうやって対処するか?

まずは、Gitでクローンしたローカルのリポジトリへ移動する。

f:id:mediator1994:20200412175839p:plain
リベートしているリポジトリへ移動する

リベートしたいブランチをチェックアウトして、リベートしたいコミットIDを探す。
git logのコマンドで履歴を見るとやりやすい。
ここまではさっきの手順と一緒だが、今回のコミットは「マージしたコミット」なので特別な処置が必要になる。

どのマージ前のコミットを残すかを選択する

マージは2つのコミットを合わせて1つのコミットを作るので、どちらのコミットをリベートするかを決めなければいけない。
この場合だと、マージしたコミットのbcc977be838916のどちらを残すかを選択する。

f:id:mediator1994:20200412182255p:plain
マージコミットは見るべき部分が多い

前者bcc977bが1番、後者がe8389162番になる。
そしてリベートするマージコミットIDを後ろに入力すればよい。

つまりは以下のコマンドでリベートをする。
git revert -m 1 4b3043e

EclipseとGitを連携できているので、Eclipseの方で履歴を確認してみる。

ちゃんとリベートのコミットができているか確認する。

リベートのコミットができていたら、これをプッシュすればいい。 f:id:mediator1994:20200412191828p:plain

プッシュしたら、GitHubの方でコミットが完了しているかを確認しよう。 f:id:mediator1994:20200412192147p:plain

どうしようもない点

「間違ったコミットを入れてしまった…」
この結果だけはGit上に残るため、失敗したというのは誰が見てもわかること。

まぁ大体の人はプッシュで失敗することは知っているはずなので、納得はしてくれると思う。
人間がやる以上間違いは必ず起きるからね。