gitでcherrypickの使い所

新機能を実装したりバグフィックスのためにあれこれ試したりする時、main or masterブランチとは別のブランチを作り、そのブランチで作業するものだ。この作業ブランチで実装した内容、つまり1つ以上のコミット全てをmainに取り込みたい時は、作業ブランチをmainブランチにmergeすれば良い。

作業ブランチのcommitのうち一部だけmainブランチに取り込みたい場合もある。その時はそのcommitのみcherrypickで取り込めば良い。また私は以下のようなケースでもcherrypickを使う。

作業ブランチをmainブランチにmergeすると多くのconflictが生じる場合がある。conflict解決作業が複雑である時、mergeではなくcherrypickを使う。具体的には以下のように作業する。

  • 作業ブランチから取り込みたいcommitのうち、古い方から新しい順に1つずつcherrypickでmainブランチに取り込んでいく
  • conflictが起きたら修正する

これだと1commit単位の作業になるのでマージミスを減らせそうである。また10commitのcherrypickのうちconflictするのは1〜2commitだけだったということもあるだろう。