cherry-pickの内容をコードレビューしてもらう方法

photo credit: Jeremy Kendall via photopin cc

Gitにはcherry-pickというコマンドがある。これは指定したコミットの変更内容だけを現在のブランチに取り込む操作を行う。

例えば、以下のような履歴があると仮定する。

---A------B [master]
   │      │
   ├-α--β┘ [feature/fugafuga]
   │
   └-i--ii--iii [feature/hogehoge]

ここで、iiimasterに対するhotfixのため、Bの後にただちに取り込まなければならないことに気付いた。この時、masterブランチで以下のコマンドを実行すると、目的は達成される。

$ git cherry-pick iii

すると、コミット履歴は以下になる。

---A------B--iii' [master]
   │      │
   ├-α--β┘ [feature/fugafuga]
   │
   └-i--ii--iii [feature/hogehoge]

これではiiiはmasterに対するhotfixのため、Bの後にただちに取り込まなければならないという目的は達成されたものの、他の人にコードレビューをしてもらうことができない。

ではどうすればよいか?

なんのことはない、Pull/Merge Requestしてレビューをしてもらえば良いのだ。

cherry-pickの内容をPull/Merge Requestする

上記と同じく以下の履歴があると仮定する。

---A------B [master]
   │      │
   ├-α--β┘ [feature/fugafuga]
   │
   └-i--ii--iii [feature/hogehoge]

masterBの後にiiiをコミットしたいので、まず、Bからbranchを切る。

$ git checkout -b cherry/pick_iii

すると、履歴は以下になる。

---A------B [master]
   │      │\
   │      │ B' [cherry/iii]
   │      │
   ├-α--β┘ [feature/fugafuga]
   │
   └-i--ii--iii [feature/hogehoge]

続いて、cherry/iiiのブランチ上で、iiicherry-pickする。

$ git cherry-pick iii

すると、コミット履歴は以下になる。

---A------B [master]
   │      │\
   │      │ B'--iii' [cherry/iii]
   │      │
   ├-α--β┘ [feature/fugafuga]
   │
   └-i--ii--iii [feature/hogehoge]

後はgit pushし、masterにPull/Merge Requestを送れば自分以外の人にcherry-pickの内容をコードレビューしてもらうことができる。