問題タブ [cherry-pick]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
mercurial - HGワークフロー:ブランチクローンから単一のチェンジセットを選択/破棄する方法
多くの開発チームでは、別の機能クローンリポジトリに新しい機能またはバグ修正を作成し、機能/バグ修正の準備ができたらプルしてマージするのが一般的だと思います。
ただし、入ってくる変更のすべてを含めたくない場合があります。DVCSのすべての機能を利用して、着信する変更を確認するには、着信する変更の単一の側面を完全に変更して選択できる必要があると思います。
このシナリオで推奨されるワークフローは何ですか?
私の知る限り、移植拡張機能は単一のチェンジセットを選択する可能性を提供しますが、パス/ファイルベースでプルーニング/選択することもできます。たとえば、一部のテストスクリプトなどを除外します。これは、最終機能には必要ありません。 。
移植は延長であるため、HGで「クローン、変更、...レビュー」サイクルを行う公式の方法は何ですか?
git - 他のマージパスをチェリーピックするにはどうすればよいですか?
私はこの構造を持っています:
B、C、D コミットは機能ブランチ パスです。Aは共通のベースです。この機能は、E コミットとしてマスターにマージされます。コミット A に (自動的に) タグを付けました。
機能ブランチにコミットがいくつあっても、ユーザーの介入なしに (スクリプトから) 自動的に、別のブランチで A、E (この場合) として "mytag" から "master" を選択するようにしたいと思います。
今私がする場合:
A、B、C、D、および E コミットを選択します。マスター ブランチ、つまり A と E からのみコミットを選択するようにしたいと思います。注: 逆の方法で E にマージしたくありません。マスターにフィーチャーしてほしい。そして、AからEは、それが分岐していることをまったく確信していません。それは A --- E かもしれません。「..」演算子のようなものが必要ですが、他のブランチの方法を使用する必要があります。
事前に助けてくれてありがとう!
さらに: 3 番目のブランチはチェリー ピックする必要があり、次のようになります。
つまり、A と E は「その他」のブランチで選択されます。
git - インタラクティブにチェリーピックする方法
私はしばらくの間ブランチをハッキングしてきましたが、このブランチはまもなくマージされません。しかし、とにかくマスターにマージしたいコミットがいくつかあります。
コミットとその変更を表示するインタラクティブなチェリーピックを取得して、実際にチェリーピックしたいものを選択させる方法はありますか?
git - git cherry-pick は、「...38c74d はマージですが、-m オプションが指定されていません」と言います。
master ブランチにいくつかの変更を加えたので、それらをアップストリームに持ち込みたいと考えています。次のコミットをチェリーピックすると。ただし、gitが言うfd9f578で立ち往生します:
git が私に伝えようとしているのは何ですか?ここで使用するのはチェリーピックが正しいですか? master ブランチには、upstream ブランチで変更されたファイルへの変更が含まれているため、マージの競合が発生することは確かですが、それらは解決するほど悪くはありません。どこでどの変更が必要かを知っています。
これらは、私がアップストリームに持ち込みたいコミットです。
git - git 安定ブランチ: 厳選されていないコミットを見つける
次の git 履歴があります。
安定版からマスター版へのすべての変更を厳選するポリシーがあります。D' と E' は安定版ブランチからチェリー ピックされたコミットであり、F はチェリー ピックではありません (忘れられています)。
F(マスターにチェリーピックされていない)を盛り上げる差分を取得するにはどうすればよいですか?
次の理由により、マージを使用したくありません。
- マージコミットなしのよりクリーンな履歴
- 安定版へのコミットはまれです
- さまざまな安定したブランチがたくさんあります
git - Gitでコミットをチェリーピッキングするとはどういう意味ですか?
最近、私はcherry-pick
コミットを求められました。
では、gitでコミットをチェリーピッキングするとはどういう意味ですか?どうしますか?
git - git cherry-pick マージ競合は他のコミットを引き込んでいますか?
何らかの理由で、ハエにマージの競合がある場合、git cherry-pick が他のコミットをプルするように見えます。これらは使用すると消えますgit mergetool
が、マージ競合ファイルを手動で編集することはできません。
なぜこれが起こるのか誰か知っていますか?
私の言いたいことを示すために、単一のファイルを持つ新しい git 1.7.4 リポジトリを見てみましょうfoo
:
この時点で、 という新しいブランチを作成しましょうbar
。マスターに戻り、このファイルに 3 つの変更を別々のコミットで追加しましょう。
コミット 1:
コミット 2:
コミット 3:
この最後のコミットは重要であるため、これをブランチbar
に戻しgit cherry-pick <commit>
、そのブランチでプルすることにしました。
残念ながら、これにより file で興味深いマージ競合が発生しますfoo
。
git mergetool
正しいことをしているように見え、これを生成することに注意してください:
マージ競合ファイルに、選択しようとしたコミットよりも前のコミットが含まれているのはなぜですか?
version-control - Mercurial でグラフトを使用した結果
Mercurial でリリース ブランチを維持する際に変更をスキップすることについて、最近いくつか質問がありました。例えば:
2.0 で導入されたので、graft
この問題を回避するために使用することを考えていました。次のようなリビジョン ツリーがあるとします。
Evil change をスキップするリリース ブランチを作成する必要があるとしますE
。
私たちに与える:
- Q1: ここで何が起こったのですか?
transplant
からパッチを生成し、それらをにF::J
適用したことは理解できますが、パッチではなく 3 方向マージを使用すると言われています。それで.......それはどのように機能しますか?なぜそれが良いのですか?D
graft
を修正E
して、それを私のリリース ブランチにマージするとしましょう。
M1 はストレート マージです。特別なことは何もありません。M2は、「同じ」(または少なくとも同等の)変更がオンになっているブランチをマージしています。
D
Q2: このマージは、J'
とを使用した通常の 3 方向マージM1
ですか?- Q3: Mercurial は、マージを支援するために移植操作に関する追加情報を保存/使用しましたか?
そして最後に...
- Q4: このようなフローの潜在的な問題は何ですか?
git - Git チェリーピック
私は git の初心者で、git cherry-pick がどのように機能するかは理解していますが、ここに私の問題があります。
最近、私のチームの誰かがマスターのディレクトリ構造を変更しましたが、別のブランチのディレクトリ構造は変更しませんでした。
今、ブランチでコードに変更を加えた場合、それらを (チェリーピック) マスターに取り込みたいと考えています。マスターとブランチの両方のディレクトリ構造が同じになるまで、これは問題ありませんでした。
topDir/some/subdir/file -- マスター
topDir/some/other/subdir/file -- ブランチ
変更がマスターに取り込まれるファイルは同じですが、それが含まれているディレクトリ構造は同じではありません。通常の方法でチェリーピックを実行しようとすると、次の行に沿ってエラーが発生します。
git checkout master git cherry-pick commit error: pathspec topDir/some/other/subdir/file が存在しません
さて、このシナリオでチェリーピッキングを行う最善の方法は何ですか? どんな指針も高く評価されます。
わかった。同じシナリオで、cherry-pick を実行すると、git は実際にコミットからファイルの 1 つを正しく選択するのに十分なほどスマートですが、他のファイルを認識しないことに気付きました。
元の投稿で述べたのと同じ例を使用するには、同じコミットで、topDir/some/subdir/file1、topDir/some/subdir1/file2.
「file1」と「file2」を持つ master に移動しますが、異なるディレクトリ構造: topDir/src/some/subdir/file1 topDir/src/some/subdir1/file2 です。
ここで、チェリーピックを行うと、git は file1 の変更を取得するのに十分なほどインテリジェントですが、これは別のディレクトリ構造にありますが、file2 の変更は取得しません。ポインタはありますか?誰かが私にもっと明確にしてほしいと思ったら、私は喜んでそうします。
したがって、問題を回避するために私がしたことは、チェリーピックを行い、git が検出しなかったものを手動で変更し、「git commit -C .
git - 名前を変更したファイルから変更をバックポートする
トランク、プロダクションの 2 つのブランチがあります。トランクに問題が見つかり、修正してコミットし、プッシュしました。これでテストが完了し、修正プログラムとして変更を本番ブランチにマージする必要があります。チェリーピックを使ってみました。ただし、修正で変更されたファイルの名前がトランクで以前にリファクタリング中に変更されたため、動作しません。
すべてをマージしたくありませんが、このコミットのみを取得します。チェリーピックは「私たちによって削除されました」という競合で失敗します(もちろん、新しいファイルは本番ブランチには存在しませんでした)。
古いファイルに変更を反映する正しい方法は何ですか?