チェリーピックは、Gitの観点からは別のコミットです。つまり、マージバックすると、最初に適用されたコミットの上に新しいコミットがマージバックされます。
つまり、ハッシュを使用してコミットを作成しますABC
。あなたはそれをチェリーピックして、新しいコミットを作成しDEF
ます。マージバックは、DEF
と一緒に適用されABC
ます。
上記では、おそらくマスター(たとえば)でコミットを実行し、それをブランチにチェリーピックすることを期待します。
このブログ投稿には詳細があります。
マスターブランチに新しいコミットが作成されることに注意してください。マスターで「gitlog」を実行すると、同じコミットメッセージに対して異なるハッシュが表示されます。なんで?
これは、Gitがコミットとは何かをモデル化する方法によるものです。コミットはリポジトリ全体の完全なスナップショットであり、特定のコミットのハッシュは、ディレクトリ全体のすべてのファイルの状態を反映します。これは、すべてのハッシュのハッシュです。
明らかに、マスターブランチには機能ブランチからのすべてのコミットがないため、バグ修正が適用されたときの完全なスナップショットは、バグ修正が適用されたときの機能ブランチの完全なスナップショットとは異なるハッシュを生成します。そこに適用されます。したがって、異なるハッシュ。
ただし、機能ブランチをマスターにマージする場合、それは問題ではありません。バグ修正を行った個々のファイルのハッシュは、内容が同じであるため同じになります。そのため、そのファイルのマスターで更新するものはありません。
このブログ投稿では、同様の状況と、そのgit rebase
ような問題を回避するための使用方法について詳しく説明しています。