Gitのリベート手順についてまとめてみた
間違えてプッシュしてしまった、マージコミットをプッシュしてしまった…。
そんなときが結構あるので、コミットの取り消しを行うリベートの方法をまとめた。
あるコミットだけを取り消したいとき
どんな状況?
基本的には以下の状況が多い。
- ブランチのチェックアウトからもう間違っていて、そのままコミット&プッシュしていたパターン
- だいぶ後になって、間違っているコミットがあることに気づいたパターン
どうやって対処するか?
まずは、Gitでクローンしたローカルのリポジトリへ移動する。
リベートしたいブランチをチェックアウトして、リベートしたいコミットIDを探す。
git log
のコマンドで履歴を見るとやりやすい。
今回の場合は赤枠の部分をリベートする。
IDが分かれば、以下のコマンドを実行すれば、リベートしたというコミットを作ることができる。
git revert commitID
コマンドを実行すると、以下のコミットが作成される。後はこれをリモートへとプッシュすればよい。
EclipseとGitを連携できているので、Eclipseの方で履歴を確認してみる。
ちゃんとリベートのコミットができているか確認する。
リベートのコミットができていたら、これをプッシュすればいい。
プッシュしたら、GitHubの方でコミットが完了しているかを確認しよう。
マージコミットを取り消したいとき
どんな状況?
基本的には以下の状況が多い。
- マージするブランチを間違っていた。
- マージした2つのブランチのどれかが最新になっていなかった。
どうやって対処するか?
まずは、Gitでクローンしたローカルのリポジトリへ移動する。
リベートしたいブランチをチェックアウトして、リベートしたいコミットIDを探す。
git log
のコマンドで履歴を見るとやりやすい。
ここまではさっきの手順と一緒だが、今回のコミットは「マージしたコミット」なので特別な処置が必要になる。
どのマージ前のコミットを残すかを選択する
マージは2つのコミットを合わせて1つのコミットを作るので、どちらのコミットをリベートするかを決めなければいけない。
この場合だと、マージしたコミットのbcc977b
とe838916
のどちらを残すかを選択する。
前者bcc977b
が1番、後者がe838916
2番になる。
そしてリベートするマージコミットIDを後ろに入力すればよい。
つまりは以下のコマンドでリベートをする。
git revert -m 1 4b3043e
EclipseとGitを連携できているので、Eclipseの方で履歴を確認してみる。
ちゃんとリベートのコミットができているか確認する。
リベートのコミットができていたら、これをプッシュすればいい。
プッシュしたら、GitHubの方でコミットが完了しているかを確認しよう。
どうしようもない点
「間違ったコミットを入れてしまった…」
この結果だけはGit上に残るため、失敗したというのは誰が見てもわかること。
まぁ大体の人はプッシュで失敗することは知っているはずなので、納得はしてくれると思う。
人間がやる以上間違いは必ず起きるからね。