私は2つのブランチを持っています:A
とB
です。git cherry-pickは、コミットのdiffを選ぶだけではありません。
A
のコミット履歴:a <- b <- c
;B
のコミット履歴:a <- h <- i
;
ここに1つのファイルしかないとします。
- コミット
b
で、「foo」のようなテキストを追加します。 - コミット
c
で、「バー」のようなテキストを追加します。 - 次に、
git cherry-pick c
のB
ブランチにあります。私はcherry-pick
がc
の変更をB
に拾うだけだと思った。ただし、ブランチB
にはfoo
とbar
の両方が追加されます。明らかに私が望むものではありません。したがって
、cherry-pick
は祖先がa
コミット以来でc
をコミット触れたこれらのファイルのすべての変更を選択します。そうですか? b
からc
までの差分を選択してi
に適用する場合はどうすればよいですか?
更新正確な手順
- 初期Gitのレポ。
ファイル
test.txt
を追加し、最初のコミットinit commit
を発行します。test.txt
は今です:first line second line
は新しいブランチ
dev
を作成しますが、ブランチmaster
にとどまります。ファイルに
added in commit b
を追加し、コミットb
を発行します。test.txt
は今です:first line added in commit b second line
は、ファイルに
added in commit c
を追加し、コミットc
を発行します。test.txt
は今:first line added in commit b added in commit c second line
dev
ブランチをチェックアウトしてコミットh
を発行します。test.txt
は今です:チェリーピックへfirst line second line adding by commit h
git cherry-pick <commit c SHA1 ID>
はコミットh
にc
をコミットします。競合メッセージ:
index 6a8dc57,594c6ec..0000000 @@@ -1,4 -1,4 +1,9 @@@ first line ++<<<<<<< HEAD ++======= + added in commit b + added in commit c ++>>>>>>> 06ce9b1... commit c adding another line second line + +adding by commit h
参照してください?
cherry-pick
もコミットで変更されましたb
。
ありがとう!
これは、あなたのhttpを助けることがあります。 //stackoverflow.com/questions/9339429/what-does-cherry-picking-a-commit-with-git-mean –
@ArunGありがとう!私は「チェリーピック」とは何かを知っています。しかし、私はちょうどそのコミットの差分を取得し、diffをターゲットブランチに適用することと同じではないと混乱しています。そのコミットには内容** NOT **も含まれています。 – tamlok
@tamlok、 'git show a'(明らかに関連するコミットSHAで' a 'を置き換える)を実行して、コミットが実際に導入される変更を調べて、なぜデルタをコミット 'b'から得るのかを確認します。 '-n'フラグをつけて' cherry-pick'を実行するといつでも停止して、望ましくない変更を手動で取り除くことができます。 – miqid