2016-02-01 10 views
21

cherry-pickにコミットの範囲を絞り込む方法を教えてください。チェリーピックしてコミットの範囲をサブディレクトリまたはサブツリーに集めます

つまり、リポジトリの現在の状態に対して2つのコミット間でdiffを適用しますか?

次はない作業(チェリーピックは何--squashオプションを持っていない)を行います。

git cherry-pick --squash e064480..eab48b59c 

注:私のユースケースは、サブツリーのシナリオの中にある - 誰もが私はスカッシュべきではないと主張して開始する前に。

次のように動作しますが、その後別の範囲のコミットがあります。私は後でインタラクティブなrebaseでそれらを手動で押しつぶすことができます。

git cherry-pick -X subtree=vendor/package e064480..eab48b59c 

チェリーピックの一環としてスクラッチを行う方法はありますか?

答えて

35

合格-n~git cherry-pick。これにより、すべてのコミットが適用されますが、コミットされません。次に、コミットするたびにすべての変更をコミットするには、単にgit commitを実行します。

+0

チェリーピックされたコミットの範囲内に複数の競合がある場合はどうなりますか? –

+2

@SazzadHissainKhan、私はそれが同じ方法で動作すると確信していますが(つまり、それぞれの競合を解決し、 'git cherry-pick --continue'を使用してください)、おそらく' -n'を操作が完了した後、個々のコミットを確認し、すべてがうまくいっていることを確認することができます。次に、インタラクティブなリベースを使用してそれらを押しつぶすことができます。 –

+0

私の場合、私はチェリーを選んで既にコミットしていましたが、最初のコミットで導入されたタイプミスを修正する別のコミットを欲しがっていました。私は2回目のコミットをチェリーしなかったので、 '-n'オプション(' --no-commit')でそれをチェリーピックし、最初のコミットを 'git commit --amend --no- edit(編集しないオプションは、最初のコミットのコミットメッセージを再利用し、新しいコミットのプロンプトは表示しません)。 – CoDEmanX

関連する問題