最近、私はコミットをcherry-pick
するように頼まれました。
それでは、gitでコミットを選択するとはどういう意味ですか?どうやってやるの?
Gitでのチェリーピッキングとは、あるブランチからコミットを選択し、それを別のブランチに適用することを意味します。
これは、通常他のブランチに多くのコミットを適用するmerge
やrebase
のような他の方法とは対照的です。
コミットを適用したいブランチにいることを確認してください。
git checkout master
以下を実行してください。
git cherry-pick <commit-hash>
N.B:
あなたが公共の支店からチェリーピックするならば、あなたは使うことを考慮するべきです
git cherry-pick -x <commit-hash>
これは標準化されたコミットメッセージを生成します。このようにして、あなた(そしてあなたの同僚)はまだコミットの起源を追跡することができ、将来マージの衝突を避けることができます。
コミットに添付されているメモがある場合、それらはチェリーピックには従っていません。それらを持ってくるためにも、あなたは次のものを使わなければなりません:
git notes copy <from> <to>
追加のリンク:
この引用はから取られます。 Gitによるバージョン管理 (本当にすばらしい本です。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
前:
後:
Gitでのチェリーピッキングは、あるブランチから別のブランチにコミットを適用するように設計されています。あなたが例えばそれはできる。間違いを犯し、間違ったブランチに変更をコミットしましたが、ブランチ全体をマージしたくはありません。あなただけのことができます。コミットを元に戻して、別のブランチで選択します。
これを使うには、git cherry-pick hash
が必要です。ここでhash
は他のブランチからのコミットハッシュです。
詳しい手順については、 http://technosophos.com/2009/12/04/git-cherry-picking-move-small-code-patches-across-branches.html を参照してください。
チェリーピックはGitの機能です。あるブランチの特定のコミットをターゲットブランチにコミットしたい場合、チェリーピックが使用されます。
gitチェリーピックの手順は以下の通りです。
git cherry-pick <commit id>
ここでコミットIDは別のブランチのアクティビティIDです。
git cherry-pick 9772dd546a3609b06f84b680340fb84c5463264f
チェリーピックが必要なときの簡単な状況の例
次のシナリオを検討してください。あなたは二つの枝を持っています。
a) release1 - このブランチはあなたの顧客に向けられていますが、まだ修正すべきいくつかのバグがあります。
b) master - 従来のmasterブランチ。例えばrelease2の機能を追加できます。
_ now _ : release1 で修正しました。もちろん、この修正は master でも必要です。そしてそれはチェリーピッキングの典型的なユースケースです。したがって、このシナリオでは、 release1 ブランチからコミットして、 master ブランチにコミットすることを選択します。
あなたはチェリーピックがリベースに似ているかどうか、あるいはむしろリベースのように管理されているかどうかを考えることができます。これによって、私はそれが既存のコミットを取り、開始点としてあなたが現在行っているブランチの先頭を取ってそれを再生成することを意味します。
rebase
は、親Xを持つコミットを取り、実際には親Yを持つかのようにコミットを再生成します。これがまさにcherry-pick
が行うことです。
チェリーピックは、コミットの選択方法についての詳細です。 pull
(rebase)を使用すると、gitはブランチに引き込まれたものの上にローカルコミットを暗黙的に再生成しますが、cherry-pick
を使用すると明示的にコミットを選択し、現在のブランチの上に暗黙的にコミットします。
そのため、やり方は異なりますが、内部では非常によく似た操作、つまりコミットの再生成です。
コピー(どこかから)や貼り付け(どこかに)に似ていますが、特定のコミットがあります。
たとえば、ホットフィックスを適用したい場合は、cherry-pick
機能を使用できます。
あなたのcherry-pick
を開発ブランチに、そしてmerge
をリリースブランチにコミットしてください。同様に、リリースブランチからmasterへcherry-pick
を実行します。ヴォイラ
プロジェクトで開発者チームと仕事をしているとき、多くのgitブランチ間の変更を管理することは複雑な作業になることがあります。ブランチ全体を別のブランチにマージしたくない場合があり、1つまたは2つの特定のコミットを選択するだけでよい場合があります。このプロセスは「チェリーピッキング」と呼ばれます。
チェリーピッキングに関する素晴らしい記事を見つけました。詳細についてはそれをチェックしてください: https://www.previousnext.com.au/blog/intro-cherry-picking-git
コミットIDなしでマージしたい場合は、このコマンドを使用できます。
git cherry-pick master~2 master~0
上記のコマンドはマスターの最後の3つのコミットを1から3にマージします。
シングルコミットでこれを行いたい場合は、最後のオプションを削除するだけです。
git cherry-pick master~2
これにより、マスターの最後から3番目のコミットをマージします。