チェリーピック

公式サイト:

git-cherry-pick | Git Documentation [Official]

使い方

現在のブランチに指定したコミットを取り込む。

$ git cherry-pick 12345abcd

参考:

他ブランチの特定のコミットを取り込む方法 – Qiita

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

コンフリクトの治し方 – 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

Tips

古いコミットの日付だけ新しくする – Qiita

記事をシェアする:
タグ:

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Protected by reCAPTCHA