9

問題:誰かが開発した機能をテストしたいのですが、それはひどく時代遅れのリモートブランチにしか存在しません。

ソース

  1. チェリーピックはどのように問題を解決しますか?
  2. なぜgitamまたはgitapplyを使用しないのですか?
4

3 に答える 3

6

問題:誰かが開発した機能をテストしたいのですが、それはひどく時代遅れのリモートブランチにしか存在しません。

マージまたはリベースすると、多くの古い変更が発生し、競合する可能性があります。

チェリーピッキングでは、1つの変更セットを取得し、それを別のブランチに対する新しいコミットとして再生します。

これは、履歴なしで1つのコミットを別のブランチにコミットする場合に便利です。

このオプションを使用すると便利な-xので、コミットメッセージにはチェリーが選択された場所のメモが含まれます。

なぜgitamまたはgitapplyを使用しないのですか?

git applyはパッチ(ファイル)を適用するためのものであり、gitamは一連のパッチを適用するためのものであるためです。gitcherry-pickはコミットを適用します-つまり、自分のリポジトリからのコミットと、他のリポジトリからインポートしたコミットを適用します。

于 2012-11-23T03:22:00.717 に答える
4

差出人git help cherry-pick

git-cherry-pick-いくつかの既存のコミットによって導入された変更を適用します

[...]

1つ以上の既存のコミットが与えられた場合、それぞれが導入する変更を適用し、それぞれに新しいコミットを記録します。これには、作業ツリーがクリーンである必要があります(HEADコミットからの変更はありません)。

したがって、cherry-pickコミットすると、gitそのコミットの変更(そのdiff)を取得して現在の作業ディレクトリに適用しようとし、現在のコミットと同等の新しいコミットを作成しますcherry-pick

これは、別の履歴行で別のコミットの変更をやり直す方法です。

変更を加えるだけでなく、cherry-pick作成者などの元のコミットの情報も保持します。

最後に、cherry-pick適用するコミットのグループを受け取ることができます。その場合cherry-pick、時系列順に(古いものから)、コミットを1つずつ実行するように動作します。

于 2012-11-23T03:24:35.540 に答える
1

問題:
誰かが開発した機能をテストしたいのですが、それはひどく時代遅れのリモートブランチにしか存在しません。

それは問題を解決します:

  • 現在の開発状況に関連しなくなったコミットを含む古いブランチをマージしたくない
  • その1つのコミットを取得するためだけに、古いブランチの上にブランチをリベースしたくはありません。
  • ブランチをその古いブランチにマージして戻す必要はありません

チェリーピッキングの最初の欠点は、重複するコミットが発生することであるため、最後のポイントは重要です。しかし、あなたの場合、それは問題ではありません。

もう1つの欠点は、チェリーピッキングするコミットに、(その古いブランチの)以前のコミットに基づく機能依存性がある可能性があることです。
言い換えれば、そのコードは、他の古いコミットの他のコード(厳選されていない)のためにのみ機能します。
それを検出するのは難しい場合があります。

于 2012-11-23T07:07:09.653 に答える