9

ここには、branch1 と branch2 という 2 つのブランチがあります。branch1 には多くの新機能が追加されており、branch2 は安定しています。今日は、branch1 から branch2 に 1 つの機能だけをマージしたいと思います。だから、私はただ走るgit cherry-pick <commit-for-feature1-in-branch1<commit-for-featur1-in-branch1branch2 にマージされるという変更だけが必要だと思います。しかし、他の機能が含まれているため、さらに多くの変更があることがわかりました。

指定されたコミットだけの差分が取得されると思いましたよね?

参考までに、branch1 のコミットは他の開発ブランチからマージされましたが、これによりこの問題が発生する可能性はありますか?

私が何か悪いことをしましたか?

ありがとう。

4

2 に答える 2

6

私もこの動作に遭遇しました...次の説明まで追跡しましたが、おそらく誰かがこれをもっと明確にします:

  • コミットをチェリーピックすると、コミットには1つのファイルに1つの変更が含まれます
  • コミットに含まれる変更だけでなく、さらに多くの変更が含まれていることに気付きます (ほとんどの場合、その変更の周りが含まれています)。

これは、コミットの変更が以前の変更に依存しているためです。したがって、このコード領域は、チェリー ピックするターゲット ブランチが作成された後に複数回変更されました。

Git は、cherry pick ソースがターゲットと一致するまで履歴をさかのぼり、このリビジョンに基づいてパッチを作成します。そのため、さらに変更が表示される可能性があります...

特定のコミットハッシュからの変更のみが選択されると予想されるため、この動作は少し怖いと思います

于 2013-09-25T09:38:12.940 に答える
4

指定したコミットをgit cherry-pick受け取り、それとその親の違いを読み取ります。これにより、効果的にパッチが作成されます。次に、このパッチを現在チェックアウトされているブランチに適用します。

あなたの場合、コミットには他の機能の追加が含まれていました。このコミットが生成するパッチを確認することで、コミット メッセージが機能と思われるものに対応していることを再確認できますgit log

git log -p -1 <sha1-of-your-commit>

-p、作成者、日付、コミット メッセージなどのコミット情報を表示するだけでなく、コミットによって導入されたパッチ (または相違点) も含めるようにログに指示します。この-1オプションは、1 回のコミット後に履歴の一覧表示を停止するように git log に指示します。

于 2011-10-18T07:01:37.430 に答える