1. chichiritsuka

    No comment

    chichiritsuka
Changes in body
Source | HTML | Preview

「gitでミスってmasterにcommitした、さらにリモートまでpushしちゃった」なんてときの対処方法。resetも効かない、ブランチ戻す操作はしたくない場合に有効なものを実例と共に記載します。

よくある作業風景

git_1.png

よくあるmasterとdevelopだけのシンプルな構成。developで開発しています。

しまったやらかした

git_2.png
git commit

developにcommitしたかったのに、間違ってmasterブランチにcommitしてしまいました。あろうことかリモートにpushまでしてしまいました。さっさと直さないと非難轟々です。

対処 : 手順1

git_3.png
git revert C4

まずは慌てずにミスってcommitした内容をrevertしましょう。revertは「対象のコミットを打ち消すパッチ」を作るオプションです。
これで取り急ぎはmasterに間違って入ったcommit分がきえました。

対処 : 手順2

git_4.png
git checkout develop
git cherry-pick C4

次に本来commitするはずだったブランチ(今回はdevelop)に反映させましょう。developブランチで対象のcommitをcherry-pickしてください。

対処 : 手順3

git_6.png
git cherry-pick C4
git revert

masterブランチでrevertした内容を取り込み、それを更にrevertして下さい。
MTGで神ジェイスに対抗呪文打ってドヤ顔してたら対抗呪文返されたみたいなもんです

やりがちなのがコレをしない場合。やらないと、最終的にmasterにdevelopをマージした際にC4'の内容が優先されてしまい、masterからC4が消えてしまいます。
ので、C4'を打ち消す内容をコミットしてやりましょう。

以上です。

git_7.png

これでmasterにdevelopをマージしてもめでたく作業内容のC4,C5,C6がまとめてC7としてmasterに反映されましたね。

画像はLearnGitBranchingで作ったものを少し加工して使わせていただきました。