Gitでコミットを部分的にチェリーピックする 質問する

Gitでコミットを部分的にチェリーピックする 質問する

私はreleasedevelopmentという 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-pickcheckout

おすすめ記事