git revert とは
一言で言えば「既存のコミットを取り消す」コマンドです。
似たコマンドでgit resetがありますが、
・git reset: そのまま過去に戻す
・git revert: 「コミットを打ち消したよ」というコミットを新たに追加して、状況を戻す
という違いがあります。
両方とも、できればあまり使いたくないですね。
revertをrevertの経緯
では、なんでrevertをrevertしたのか、ですが、
①最新コミットが不要だったので、revertした
②やっぱりそのコミットは必要だった
③revertしたことをrevertしたい
という経緯です。
一から書き直してもいいですが、
やっぱりまるまる一気に元に戻したい。。。
revertをrevertする
それでは実際にどんな感じだったか、可能な範囲で晒していきます。
※ ブランチ名を仮にfix_user_images
とします。
1、最初のrevert
# "git revert [コミット番号]"で、そのコミットを無かったことにする
$ git revert fb286b771
[fix_user_images 2c93f2815] Revert "画像サイズ修正"
3 files changed, 1 insertion(+), 8 deletions(-)
create mode 100644 〜〜/〜〜
2、revertをrevert
1でなくなくrevertしたあとに、同じブランチで既に新たな開発を始めていたので、
その開発内容はサラにします(泣
# ログ確認
$ git log --oneline
2829851e0 (HEAD -> fix_user_images) Revert "画像サイズ修正"
2c93f2815 Revert "ユーザー画像追加"
7b1b3b230 (origin/fix_user_images) Merge branch 'develop' of gitlab.〜〜〜:〜〜〜 into fix_user_images
...
# 最新コミットに戻す
$ git reset --hard HEAD
HEAD is now at 2829851e0 Revert "画像サイズ修正"
# revertして作られたコミット「"Revert "画像サイズ修正"」をrevert
$ git revert 2c93f2815
Removing 〜〜/〜〜
[fix_user_images 619bf7743] Revert "Revert "画像サイズ修正""
3 files changed, 8 insertions(+), 1 deletion(-)
delete mode 100644 〜〜/〜〜
3、無事反映を確認
$ git log --oneline
619bf7743 (HEAD -> fix_user_images ) Revert "Revert "画像サイズ修正""
2c93f2815 Revert "画像サイズ修正"
7b1b3b230 (origin/fix_user_images) Merge branch 'develop' of gitlab.〜〜〜:〜〜〜 into fix_user_images
fb286b771 画像サイズ修正
...
終わりに
・git revert
・git reset
・git rebase
は「3大叩いてはいけないgitコマンド」としてインプットしていましたが、
実際はまだまだこんなもんじゃないんだろうなと思います。
今後頻繁に叩く必要が出ないことを祈ります。。。。