この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
はじめに
こんにちは、motsukaです。
今回は、Gitでマージしてはいけないブランチをマージした時の対処法を紹介したいと思います。
状況
現在開発しているreleaseブランチと新ステージ実装をしているdevelopmentブランチがある状態で、
新ステージの実装が終わったのでdevelopmentブランチをreleaseブランチにマージしてpushしました。
ですが、まだその新ステージはマージしてはいけないものでした。
では、マージコミットを取り除くにはどうしたらいいでしょうか?
解決策
Gitにはコミットを取り消す方法は幾つか有ります。
有名なのが、resetとrevertですね。
今回はrevertを使ってマージコミットをrevertしてみます。
まずgit logでマージしたコミットのcommitIDをコピーします。
次に git revert commitID と打ってみます。すると
fatal: Commit commitID is a merge but no -m option was given.
と言うエラーが出ます。
これはマージコミットには -m をつけてくださいと言うエラーです。
-m オプションは、mainlineを指定するオプションです。
マージコミットをrevertした後の状態とは、二つのブランチの状態のどちらかになりますよね?
この二つのブランチのどちらに状態を戻すかを指定しなければなりません。
-m の後ろには1か2を指定することができて、1がマージされたブランチ、2はマージしてくるブランチです。
ここでは1がreleaseブランチ、2がdevelopmentブランチですね。
では、 git revert -m 1 commitID と打ちます。
すると、revertコミットがされたことが確認できます。
これでコミットを取り除くことができました。
ですが、これだともう一度新ステージをマージしようとした時、マージができません。
すでにマージされているというエラーが出てしまいます。
その解決策として、developmentブランチにreleaseブランチをマージします。
そして先ほど取り除いたコミットをまたrevertします。
そうするとまたマージした時にエラーが出ることがなくなります。
まとめ
gitで間違えた時の対処法は各自調べておきましょう。