はじめに
フォークを開発しているときに「また別のフォークの機能を借りてきたい」みたいな経験、ありませんか?
それ、cherry-pick
で実現できます。
cherry-pick って?
異なるブランチの特定コミットだけをいい感じにブランチしてくれる機能です。
イメージとしてはこんな感じ。
この時、
git ccheckout A
git cherry-pick [#1のcommit id] [#2のcommit id]
とすることで、#1と#2のコミットのみをBranch Aに取り込むことができます。
別リポジトリのcommitを取り込むには
作業の前に、取り込む機能に合わせて作業用のブランチを切っておくといいでしょう。
まず、リモートのリポジトリを追加し、fetchします。
git remote add [任意の名前] [取り込みたい機能のあるリモートリポジトリのURL]
git fetch [remoteで追加した任意の名前]
そして、cherry-pickします。
git cherry-pick [取り込みたいcommit id]
たったこれだけです。
コンフリクトの解消
cherry-pickを実行すると、場合によって稀にコンフリクトが発生することがあります。
この場合、Gitは自動的にマージできない部分を示してくれますので、それを手動で解決する必要があります。
コンフリクトの解消については、ローカルでのそれと変わらないので、ここあたりを参照するといいでしょう。
さいごに
cherry-pickを利用することで、異なるブランチやリポジトリから特定のコミットだけを取り込むことができます。
私もmisskeyのフォークを開発している中で何度もお世話になりました。
この記事が誰かのお役に立てれば幸いです。
それでは。