2011-10-18 3 views
5

私はここに2つの枝、例えばbranch1とbranch2を持っています。 branch1には多くの新機能が追加され、branch2は安定しています。今日は、ブランチ1からブランチ2までの1つの機能をマージしたいと考えています。だから、私はちょうどgit cherry-pick <commit-for-feature1-in-branch1を実行します。 <commit-for-featur1-in-branch1の変更のみがbranch2にマージされるはずです。しかし、私は他の機能のためのより多くの変更が含まれていることがわかった。なぜチェリーピックピックが複数のコミットを変更するのですか?

私はそれが指定されたコミットのためだけにdiffを取得すると思っていましたか?

branch1のコミットが他の開発ブランチからマージされましたが、これはおそらくこの問題を引き起こしますか?

私は間違っていましたか?

ありがとうございました。

+2

は、指定されたが、それ以上を含んでいなかったコミットというよろしいです取り出されることを期待しているから、私はこの振る舞いは少し怖い見つける...

ですあなたが思ったよりも変化しますか? – VonC

+0

ええ、私はコミットのdiffを見てみました:git diff revision^revision。それが私の必要なものです。 – Rocky

答えて

3

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

あなたの場合、コミットには他の機能が追加されています。あなたは、コミットメッセージは、機能がgit logを生成するこのコミットのパッチを見て、と思ったものに対応していることをダブルチェックすることができます

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

-pをするだけでなく、著者のようなコミット情報を表示するログ伝え、日付とコミットメッセージが含まれていますが、コミットが導入するパッチ(または差分)も含める必要があります。 -1オプションを指定すると、git logは1回コミットした後の履歴を停止します。

+0

あなたの答えをありがとう。私はログをチェックした。それはまさに私が欲しいものです。しかし、私はgit cherry-pickを実行した後、コミットしていないコードを追加しました。そして、参考までに、branch1のコミットが他の開発ブランチからマージされましたが、これはおそらくこの問題を引き起こしますか? – Rocky

+0

コードがブランチにありました。チェリーピックしたブランチに 'git log -p -1'を実行し、何が追加されたのかを見てください。余分なものがそこになければ、それはそのブランチにすでに存在していることを意味します。どちらのコミットがコードを追加したのかを確認するために、 'git log -Ssometextfromafeature'がそのコードを追加したものを表示します。 –

1

私もこの動作に遭遇してきた...私は以下の説明にそれを追跡してきましたが、おそらく誰かがこのAそれ以上の明確化:

  • あなたの桜は、コミットは1が含まれ、コミット選びますあなたが変更をコミットに含まれているだけでなく、より変化(主にその変更の周りが含まれている)だけでなく、ことに気づく1つのファイル
  • の変化

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

Gitはチェリーピックソースがターゲットと一致するまで履歴に戻り、このリビジョンに基づいてパッチを作成します。より多くの変更が表示される場合がありますなぜ1が与えられたから変更のみハッシュをコミットが

関連する問題