web-dev-qa-db-ja.com

Gitでコミットをチェリーピッキングするとはどういう意味ですか?

最近、私はコミットをcherry-pickするように頼まれました。

それでは、gitでコミットを選択するとはどういう意味ですか?どうやってやるの?

1837
Rahul

Gitでのチェリーピッキングとは、あるブランチからコミットを選択し、それを別のブランチに適用することを意味します。

これは、通常他のブランチに多くのコミットを適用するmergerebaseのような他の方法とは対照的です。

  1. コミットを適用したいブランチにいることを確認してください。

    git checkout master
    
  2. 以下を実行してください。

    git cherry-pick <commit-hash>
    

N.B:

  1. あなたが公共の支店からチェリーピックするならば、あなたは使うことを考慮するべきです

    git cherry-pick -x <commit-hash>
    

    これは標準化されたコミットメッセージを生成します。このようにして、あなた(そしてあなたの同僚)はまだコミットの起源を追跡することができ、将来マージの衝突を避けることができます。

  2. コミットに添付されているメモがある場合、それらはチェリーピックには従っていません。それらを持ってくるためにも、あなたは次のものを使わなければなりません:

    git notes copy <from> <to>
    

追加のリンク:

2216
Philip Fourie

この引用はから取られます。 Gitによるバージョン管理 (本当にすばらしい本です。Gitに興味があるなら、ぜひ購入してください。)

編集:この答えはまだ印象を受けているので、私はそれについてのアクションビデオチュートリアルで非常にいいを追加したいと思います:

YouTube:Gitチェリーピックの紹介

Git cherry-pickの使用git cherry-pick commitコマンドは、現在のブランチで、名前付きコミットによって導入された変更を適用します。それは新しい、はっきりとしたコミットを紹介します。 厳密に言うと、git cherry-pickを使用してもリポジトリ内の既存の履歴は変更されません。代わりに、それは歴史に加わります。差分を適用する過程で変更を加える他のGit操作と同様に、与えられたcommit からの変更を完全に適用するために衝突を解決する必要があるかもしれません。コマンドgit cherry-pickは通常、リポジトリ内のあるブランチから別のブランチに特定のコミットを導入するために使用されます。一般的な使い方は、メンテナンスブランチから開発ブランチへコミットをフォワードまたはバックポートすることです。

$ git checkout rel_2.3
$ git cherry-pick dev~2 # commit F, above

前: before

後: after

252
Teoman shipahi

Gitでのチェリーピッキングは、あるブランチから別のブランチにコミットを適用するように設計されています。あなたが例えばそれはできる。間違いを犯し、間違ったブランチに変更をコミットしましたが、ブランチ全体をマージしたくはありません。あなただけのことができます。コミットを元に戻して、別のブランチで選択します。

これを使うには、git cherry-pick hashが必要です。ここでhashは他のブランチからのコミットハッシュです。

詳しい手順については、 http://technosophos.com/2009/12/04/git-cherry-picking-move-small-code-patches-across-branches.html を参照してください。

140
Tadeck

チェリーピックはGitの機能です。あるブランチの特定のコミットをターゲットブランチにコミットしたい場合、チェリーピックが使用されます。
gitチェリーピックの手順は以下の通りです。

  1. ターゲットブランチをチェックアウト(切り替え)します。
  2. git cherry-pick <commit id>
    

    ここでコミットIDは別のブランチのアクティビティIDです。

    git cherry-pick 9772dd546a3609b06f84b680340fb84c5463264f
    
  3. ターゲットブランチにプッシュ

にアクセスしてください - https://git-scm.com/docs/git-cherry-pick

46
Vijay S B

チェリーピックが必要なときの簡単な状況の例

次のシナリオを検討してください。あなたは二つの枝を持っています。

a) release1 - このブランチはあなたの顧客に向けられていますが、まだ修正すべきいくつかのバグがあります。

b) master - 従来のmasterブランチ。例えばrelease2の機能を追加できます。

_ now _ release1 で修正しました。もちろん、この修正は master でも必要です。そしてそれはチェリーピッキングの典型的なユースケースです。したがって、このシナリオでは、 release1 ブランチからコミットして、 master ブランチにコミットすることを選択します。

42
Daniel Perník

あなたはチェリーピックがリベースに似ているかどうか、あるいはむしろリベースのように管理されているかどうかを考えることができます。これによって、私はそれが既存のコミットを取り、開始点としてあなたが現在行っているブランチの先頭を取ってそれを再生成することを意味します。

rebaseは、親Xを持つコミットを取り、実際には親Yを持つかのようにコミットを再生成します。これがまさにcherry-pickが行うことです。

チェリーピックは、コミットの選択方法についての詳細です。 pull(rebase)を使用すると、gitはブランチに引き込まれたものの上にローカルコミットを暗黙的に再生成しますが、cherry-pickを使用すると明示的にコミットを選択し、現在のブランチの上に暗黙的にコミットします。

そのため、やり方は異なりますが、内部では非常によく似た操作、つまりコミットの再生成です。

18
Hugh

コピー(どこかから)や貼り付け(どこかに)に似ていますが、特定のコミットがあります。

たとえば、ホットフィックスを適用したい場合は、cherry-pick機能を使用できます。

あなたのcherry-pickを開発ブランチに、そしてmergeをリ​​リースブランチにコミットしてください。同様に、リリースブランチからmasterへcherry-pickを実行します。ヴォイラ

8
Ajeet Sharma

プロジェクトで開発者チームと仕事をしているとき、多くのgitブランチ間の変更を管理することは複雑な作業になることがあります。ブランチ全体を別のブランチにマージしたくない場合があり、1つまたは2つの特定のコミットを選択するだけでよい場合があります。このプロセスは「チェリーピッキング」と呼ばれます。

チェリーピッキングに関する素晴らしい記事を見つけました。詳細についてはそれをチェックしてください: https://www.previousnext.com.au/blog/intro-cherry-picking-git

4
Wolfack

コミットIDなしでマージしたい場合は、このコマンドを使用できます。

git cherry-pick master~2 master~0

上記のコマンドはマスターの最後の3つのコミットを1から3にマージします。

シングルコミットでこれを行いたい場合は、最後のオプションを削除するだけです。

git cherry-pick master~2

これにより、マスターの最後から3番目のコミットをマージします。

2
Bills