gitでマージする前に、タグをつけておくとすぐに戻せて、大失敗が回避できる

今僕はstatic-perlという、Perl上で動く静的な型を持つVMを持った言語バーチャルマシンを作成しています。

オープンソースで開発していて、他の開発者の方からpull requestを受け取っているのだけれど、pull requestをマージする前に必ずやっていることがある。

マージする前にタグをつけておく

いまmasterブランチにいたとして「foo」という他の開発者が作ってくれたブランチをマージする。

git merge foo

でも、マージって、思ってもみないものだったりするときに、戻すのが結構めんどうなんだよね。「あー、戻すのどうすんだっけなぁ。失敗したなぁ。」

でも、そういう場合に備えて、**タグを先につけておくとすぐに戻せるよ**。

git tag 20170107

マージする前にタグをつけておく。するとマージに失敗しても、

git reset --hard 201701017

とすると、あら不思議、元通り!

追記「ORIG_HEADでも戻れるという情報をいただきました」

タグを使わなくても、git reset --hard ORIG_HEADでいいはずです。ORIG_HEADはgit mergeのときに作成されるシンボリック参照で、この記事で言っているタグと同様のコミットを指します。

関連情報