#cherry-pickコマンドとは?
cherry-pickコマンドとは、他のブランチ上にある特定のコミット内容を別のブランチ上に反映できるコマンドをいう。
このコマンドは、mergeコマンドのように全てのコミット内容を反映するコマンドとは異なり、余計なコミット内容まで取り込んでしまう恐れがないのでとても便利なコマンドである。
このコマンドを使えば、プルリクエストを細かく作り直したい時や誤って他のブランチ上でコミットしてしまった場合に役立つことができる。
#実行手順
##1.cherry-pickコマンドの使い方
cherry-pickコマンドを実行する前に以下のコマンドを実行する必要がある。
git checkout ブランチ名
git checkoutコマンドについては、以下の記事を参照ください。
https://qiita.com/yusukaaay/items/56de8e5f3f0d888906d1
また、ブランチ名が長かったり、複雑な表記で記憶してない場合は、以下のコマンドを実行すると、ブランチ名がターミナル上に表記される。
git branch
そして、cherry-pickコマンドの使い方は、以下のように実行する。
git cherry-pick コミットID
##2.コミットIDの特定方法
そして、コミットIDを表示させるには、ターミナル上で以下のコマンドを実行する。
git log
すると、以下の画像のようにコミットIDの一覧が表示される。
https://gyazo.com/5c999344f08c260275ee3281f82095af
しかし、コミットIDの一覧だけ表示されても、コミット内容がなんなのか不明なことがある。そんな時は、ターミナル上で、以下のコマンドを実行する。
git log --stat
すると、以下の画像にように、コード修正を行ったファイル名や変更修正をどれほど行ったのかの一覧が表示される。
https://gyazo.com/b99c730ea2cdb51f2edcbf5a1a7308f5
また、目当てのコミットIDが見当たらない場合は、GitHub Desktop上にて、コミットされているブランチ名と同じブランチ名のブランチに切り替えてみる。そして、再びターミナル上で、 git logコマンドを実行してみると表示されうる。
##3.競合が発生した場合について
コミットIDを特定して、cherry-pickコマンドした時、以下のような表示がターミナル上に出た場合、競合が生じています。
git cherry-pick 26151f9ee8......
error: could not apply 26151f9ee8......
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'
競合を解消(解決)方法については、以下の記事を参照ください。
https://qiita.com/okamoto_ryo/items/1cb1977916e8270efca0
競合を解消(解決)できた後は、以下のコマンドを実行しする。
git add .
そして、最後にGitHub Desktopにて、cherry-pickした内容をコミットして、リモート環境にpushし、マージを行うことで作業完了となる。
以上
<参考記事>
・https://qiita.com/ta__ho/items/8204a22a53b02ee0817e
・https://qiita.com/bossunn24/items/dedb620541d852327934
・https://www.sejuku.net/blog/71544#ID
・https://git-scm.com/book/ja/v1/Git-%E3%81%AE%E5%9F%BA%E6%9C%AC-%E3%82%B3%E3%83%9F%E3%83%83%E3%83%88%E5%B1%A5%E6%AD%B4%E3%81%AE%E9%96%B2%E8%A6%A7