3

私は 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 .

4

2 に答える 2

5

喜んでお手伝いします:)マスターのものが永続的な方法になる場合は、トピックブランチのファイル構造をマスターに一致するように修正し、ブランチにコミットし、変更をチェリーピックではなくマスターにマージします。のように

git checkout branch
mv other/subdir/file subdir/file
git status
// git add and git rm to get the commit proper
git commit -m "fixing file struct"
git checkout master
git merge branch

実際には、それはファイルのユースケースが何であるか、およびマスターブランチに何を置きたいかによって異なります。これは、会社固有の質問であり、ここにいる誰もがあなたに答えることができる技術的な問題ではありません;)

于 2012-03-08T19:50:31.233 に答える
0

A,B,C,D,E & Fノードがあるとします。ユーザーは現在ノードにいて、type git コマンドを使用してノードFをチェリーピックしたい場合、このコマンドはノードをノードに適用します。CGit Cherry-Pick CCF

于 2016-01-05T12:01:06.820 に答える