「gitでミスってmasterにcommitした、さらにリモートまでpushしちゃった」なんてときの対処方法。resetも効かない、ブランチ戻す操作はしたくない場合に有効なものを実例と共に記載します。
よくある作業風景
よくあるmasterとdevelopだけのシンプルな構成。developで開発しています。
しまったやらかした
developにcommitしたかったのに、間違ってmasterブランチにcommitしてしまいました。あろうことかリモートにpushまでしてしまいました。さっさと直さないと非難轟々です。
対処 : 手順1
まずは慌てずにミスってcommitした内容をrevertしましょう。revertは「対象のコミットを打ち消すパッチ」を作るオプションです。
これで取り急ぎはmasterに間違って入ったcommit分がきえました。
対処 : 手順2
git checkout develop
git cherry-pick C4
次に本来commitするはずだったブランチ(今回はdevelop)に反映させましょう。developブランチで対象のcommitをcherry-pickしてください。
対処 : 手順3
git cherry-pick C4'
git revert
masterブランチでrevertした内容を取り込み、それを更にrevertして下さい。
やりがちなのがコレをしない場合。やらないと、最終的にmasterにdevelopをマージした際にC4'の内容が優先されてしまい、masterからC4が消えてしまいます。
ので、C4'を打ち消す内容をコミットしてやりましょう。
以上です。
これでmasterにdevelopをマージしてもめでたく作業内容のC4,C5,C6がまとめてC7としてmasterに反映されましたね。
画像はLearnGitBranchingで作ったものを少し加工して使わせていただきました。