私は2つの異なるブランチに取り組んでいます:releaseとdevelopment。
releaseブランチにコミットされたいくつかの変更をdevelopmentブランチに戻す必要があることに気づきました。
問題は、コミットのすべてを必要とするのではなく、特定のファイルの中にいくつかのハンクだけを必要とすることです。
git cherry-pick bc66559
トリックはしません。
私がするとき
git show bc66559
差分を見ることはできますが、現在の作業ツリーに部分的に適用する良い方法を実際には知りません。
私は古い質問に答えていることを知っていますが、対話的にチェックアウトしてこれを行うための新しい方法があるようです。
git checkout -p bc66559
必要な変更が変更を必要とするブランチの先頭にあると仮定して、git checkoutを使用します。
単一ファイルの場合
git checkout branch_that_has_the_changes_you_want path/to/file.rb
複数ファイルの場合はデイジーチェーン接続するだけです。
git checkout branch_that_has_the_changes_you_want path/to/file.rb path/to/other_file.rb
Mike Monkiewicz に基づいて構築すると、提供されているsha1/branchからチェックアウトするファイルを1つ以上指定することもできます。
git checkout -p bc66559 -- path/to/file.Java
これにより、現在のバージョンのファイルに適用したい変更を対話的に選択することができます。
コマンドラインでファイルのリストを指定し、1つのアトミックコマンドですべてを実行したい場合は、以下を試してください。
git apply --3way <(git show -- list-of-files)
--3way
:パッチがきれいに適用されない場合、Gitはgit mergetool
を実行できるようにマージの競合を作成します。 --3way
を省略すると、Gitはきれいに適用されないパッチをあきらめます。
「部分的にチェリーピッキング」が「ファイル内で、いくつかの変更を選択し、他の変更を破棄する」ことを意味する場合、それはgit stash
を取り込むことによって実行できます。
git reset HEAD^
は選択されたコミット全体をステージングされていない作業変更に変換します。git stash save --patch
:隠したい不要な素材を対話的に選択します。git commit
git stash drop
:不要な変更の隠し場所を捨てます。ヒント:不要な変更の隠し場所にgit stash save --patch junk
という名前を付けると、(6)の実行を忘れると、後でその隠し場所がわかります。