私はreleaseとdevelopmentという 2 つの異なるブランチで作業しています。
リリースブランチにコミットされたいくつかの変更を開発ブランチに統合する必要があることに気付きました。
問題は、コミットのすべてではなく、特定のファイルの一部のハンクだけが必要なことです。そのため、単純な
git cherry-pick bc66559
効果がありません。
私が
git show bc66559
差分は確認できますが、それを現在の作業ツリーに部分的に適用する良い方法がわかりません。
ベストアンサー1
ここで必要になる中心となるのはgit add -p
(-p
は の同義語です--patch
) です。これにより、インタラクティブな方法でコンテンツを追加できるようになり、各ハンクを追加するかどうかを決定したり、必要に応じてパッチを手動で編集したりできるようになります。
cherry-pick と組み合わせて使用するには:
git cherry-pick -n <commit> # get your patch, but don't commit (-n = --no-commit)
git reset # unstage the changes from the cherry-picked commit
git add -p # make all your choices (add the changes you do want)
git commit # make the commit!
git-cherry-pick
( には オプションがあることを思い出させてくれた Tim Henigan--no-commit
と、 が必要であることを指摘してくれた Felix Rabe に感謝しますgit reset
。コミットからいくつかの項目だけを残したい場合は、 を使用してそれらのファイルだけをステージング解除することができますgit reset <path>...
。)
必要に応じて、 への特定のパスを指定できますadd -p
。パッチから始める場合は、cherry-pick
を に置き換えることができますapply
。
本当に必要な場合はgit cherry-pick -p <commit>
(そのオプションは存在しません)、
git checkout -p <commit>
これにより、現在のコミットと指定したコミットの差分が取得され、その差分からハンクを個別に適用できるようになります。このオプションは、取り込むコミットに、関心のないコミットの一部でマージ競合がある場合に便利です。(ただし、 はcheckout
と異なることに注意してくださいcherry-pick
。は の内容全体checkout
を適用しようとしますが、は指定されたコミットの親からの差分を適用します。つまり、 はそのコミットだけでなく、それ以上のものを適用できるため、必要以上に多く適用してしまう可能性があります。)<commit>
cherry-pick
checkout