チェリーピック
公式サイト:
git-cherry-pick | Git Documentation [Official]
使い方
現在のブランチに指定したコミットを取り込む。
$ git cherry-pick 12345abcd
参考:
git cherry-pick の基本仕様と、主要なオプション | WWWクリエイターズ
git cherry-pick で特定のコミットのみを適用する | Gitテックラボ
git cherry-pick で助かりました/他ブランチのコミットを反映させる方法 – Qiita
複数の commit をまとめて cherry-pick する – dackdive’s blog
How to cherry-pick from a remote branch? – Stack Overflow
git cherry-pick within a pull request – GitHub Gist
複数の連続するコミットを取り込む
現在のブランチに A の次から B までのコミットを取り込む。(A を含まない)
$ git cherry-pick A..B
現在のブランチに A から B までのコミットを取り込む。(A を含む)
$ git cherry-pick A~..B
参考:
複数の commit をまとめて cherry-pick する | dackdive’s blog
Basic workflow for creating a cherry-pick pull request for ansible | GitHub Gist
Cherry-pick a pull request into a branch? – Stack Overflow
How to cherry-pick multiple commits – Stack Overflow
特定のプルリクエストをフェッチする
ブランチ branch_name
から XX
番目のプルリクエストをフェッチする。
$ git fetch origin pull/XX/head:branch_name
プルリクエストをチェリーピックする。
$ git cherry-pick origin/pr/XX
参考:
Checking Out Pull Requests Locally – User Documentation | GitHub [Official]
Can cherrypick all PR (pull request) from GitHub? – Stack Overflow
origin の全プルリクエストをまとめてフェッチする
.git/config
を開いて fetch = +refs/pull/*/head:refs/remotes/origin/pr/*
を追記する。
[remote "origin"] fetch = +refs/heads/*:refs/remotes/origin/* url = git@github.com:user_name/repo_name.git fetch = +refs/pull/*/head:refs/remotes/origin/pr/*
通常のフェッチコマンドで全プルリクエストがフェッチされる。
$ git fetch origin
プルリクエストをチェリーピックする。
$ git cherry-pick origin/pr/XX
参考:
Checkout GitHub pull requests locally (piscisaureus) – GitHub Gist
Can cherrypick all PR (pull request) from GitHub? – Stack Overflow
マージコミットを取り込む
支流を本流に取り込む。
$ git cherry-pick -m 1 COMMIT_HASH
本流を支流に取り込む。
$ git cherry-pick -m 2 COMMIT_HASH
参考:
merge commit を cherry-pick する – Qiita
特定のコミットからパッチを作成して他のブランチに適用する
パッチを作成する。
$ git format-patch -k -1 --stdout COMMIT_HASH > patch_file
パッチを適用する。
$ cat patch_file | git am -3 -k
参考:
Git で任意のリポジトリコミットを別のリポジトリ以下にコミットごと移設する – Qiita
別リポジトリのコミットをパッチとして当てる (git format-patch & git am) | syon/til
別のリポジトリの差分を取り込む | EZ-NET ネットワークステーション
Is it possible to cherry-pick a commit from another git repository? – Stack Overflow
他のリポジトリからコミットを取り込む
対象のリポジトリをリモートとして追加する。
$ git remote add target git@github.com/user_name/repo_name.git
対象のリモートをフェッチする。
$ git fetch target
あるいは必要な範囲だけフェッチする。
$ git fetch target 12345abcd --depth 1
対象のコミットを取り込む。
$ git cherry-pick 12345abcd
リモートを削除する。
$ git remote rm target
参考:
異なる\リポジトリ間でも cherry-pick はできる – Qiita
異なるリポジトリ間で cherry-pick をする | atwata developer blog
git remote add を取り消す方法 – Qiita
リモート URL を削除する方法 | Delft Stack
Cherry-pick from Another Repository | Coderwall
コンフリクトが発生する
deleted by us
:取り込むコミットで更新したファイルが既に削除されている
コンフリクト時に取り込むコミットの方を優先する場合は、-X theirs
オプションを付与してチェリーピックを実行する。
ドキュメント:
--strategy – git-cherry-pick | Git Documentation [Official]
参考:
git checrry-pick とコンクリフトについて – Qiita
git cherry-pick でバイナリーファイルが衝突 | さるまりんのガレージ
git merge -Xours / Xtheirs は上書きではない | たくのこ Web
git cherry-pick で起きてしまった conflict の解消方法 | 何者にもなれていない5年目のエンジニアブロ
Cherry-Picking Done Easy | Roman Sorin
force to accept cherry-pick’s changes – Stack Overflow
How do I resolve cherry-pick conflicts using their changes? – Stack Overflow
cherry picking with ours / theirs strategy – Stack Overflow