🍒

cherry-pick コマンド備忘録

2021/12/04に公開

closeしたPRにコミットしていたソースコードを再利用したいなっと思い、git cherry-pick コマンドを最近使いました。

その際に cherry-pick について学んだので備忘録ついでに記事にしました。


cherry-pick とは?

ローカルにある 別ブランチの特定のコミットだけを取り込むことができるやつですね。

任意の Git コミットを参照できるようにするとともに、現在作業中の HEAD にそのコミットを追加することができる強力なコマンドです。チェリーピックとは、あるブランチのコミットを別のブランチに適用する操作のことです

参照: https://www.atlassian.com/ja/git/tutorials

上に書いたような状況や、バグのホットフィックス等でで活用できるので知っていると便利です。

使用方法

基本的なコマンド

  • ピックアップしたいコミットのハッシュ値を用いる。git log で commit 履歴から調べるか、マージされたPRなら、PRの最後のところにハッシュ値が載っているのでそこを参照。
git cherry-pick [commit-hash]

  • もしくは 特定のブランチの先頭にあるコミットを取り込みたい場合はそのブランチ名を用いる。
git cherry-pick [branch名]

  • 他にも複数のcommit をまとめて取り込むこともできます。

開始位置のハッシュと終了位置のハッシュ値を用いることでその間のcommit をcherry-pickできます。

git cherry-pick [開始位置のハッシュ値]..[終了位置のハッシュ値]

※注意

上記のcherry-pickコマンドでは、開始位置となるcommit は取り込まれないです。

オプション

cherry-pickコマンドにはオプションがあり、知っておくと便利です。

  • 自動コミットせず手元にコピーだけする。
git cherry-pick [ハッシュ値] -n

git cherry-pick コマンドは何も指定しなければ自動で取り込んだ内容をコミットします。このオプションは 例えば、他のcommit もcherry-pick したり、別の変更内容と一緒にコミットしたい際に活用できそうですね。 -n は no commit の略です。

  • cherry-pickしたコミットのコミットメッセージを変える
git cherry-pick [ハッシュ値] -e

こちらも何も指定しない場合、cherry-pickコマンドは以前のコミットメッセージになります。これを変更したい場合、は 末尾に -e をつければコミット前にメッセージを変更できます。

-e はedit のことですね。

  • cherry-pickしたコミットのコミットハッシュを明記する
git cherry-pick [ハッシュ値] -x

上記のオプションをつけると from commit [コミットハッシュ] がつきます。これでどこのコミットをcherry-pickしたのかがわかるので便利ですね。

あんまり使わないと思いますが、署名ができる -s コマンドもあります。

感想

cherry-pick は使ったことがないときはなんだか怖いコマンドのように思えましたが、調べて実際に使ってみると 特定のケースでは便利ですね。(そんなに頻繁に使うものでもないですが)

git cherry-pick の仕組みについては ググると図付きで解説しているサイトがたくさん出てきますのでそちらをみるとなるほど理解!ってなると思います。言葉だけでは最初は???ってなりますしね。コマンドなんだっけ〜ってなった際はこの記事をみていただけると嬉しいです。

それではまた。

Discussion