37
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

リモートに不要なコミットをプッシュしてしまった時にやったこと

Posted at

不要なコミットを消したい

状況
プルリク出してレビューをお願いしようと、リモートの作業ブランチにプッシュした。直後に、不要なコミットが混ざっていたことに気づいたので特定のコミットを消したい。

解決策

  • git log ローカルでまず不要なコミットのidを調べる
  • git revert 不要なコミットのid ローカルからコミットを削除(履歴は残る)
  • git push origin リモートのブランチ名リモートのコミットを上書きして不要なコミットを削除(履歴は残る)

この4ステップで完了。

git revert の流れ

コミットの履歴を確認

$ git log

コミットの履歴を見ることができます。コミットのid以外にも、Authorや日付、コミットメッセージも見ることができる。ここで消したいコミットのidを特定して、revertの際に指定してあげます。

revertコマンド

$ git revert コミットid

冒頭ではコミットを削除と簡単に書いてしまいましたが、正しく表現すると指定したコミットを打ち消すコミットを新たに作るという処理です。何にもなかったことにするわけではありません。
このあたりは運用ルール的なこともあるかと思いますが、個人的には消した履歴も残っててくれる方がありがたいので、この方法が良いです。

revertを実行すると、上記の通りコミットを新たに作るのですが、その際のコミットメッセージは元のままにすることもできますし、変更することも可能です。

revertしてコミットしない(複数コミットを一気に処理)

$ git revert コミットid -n

消したいコミットが複数ある場合は、-nのオプションをつけると、コミットされずにrevertだけされます。一番最後にまとめてコミットできるので便利です。

完全に消したいとき

$ git reset コミットid

完全になかったことにする場合は、git resetコマンドを使います。ただし履歴で遡れないので注意が必要です。

変更をリモートにプッシュ

$ git push origin リモートブランチ

ローカルでの変更をリモートにプッシュして上書きします。作業を打ち消すコミットをプッシュすることになるので、当然リモートにも履歴が残ります。

はじめてgit revert使った

はじめて使ったので、復習ついでにまとめました。gitはまだまだ使ったことないコマンド多いです。たまにやらかした時しかググって使わないので、使ったものはまとめていこうと思いました。

コミットを取り消す前に、もし誰かが作業を進めている可能性がある場合は、確認しないといけないですね。今回はゆるっとできる状況だったので問題なく取り消し作業できました。

37
25
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
37
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?