主要な回答は、特定のコミットからの変更を現在のブランチに適用する方法を説明しています。それが「どのようにマージするか」であなたが意味することであるならば、彼らが提案するように、ちょうどチェリーピックを使ってください。
しかし、実際にマージが必要な場合、つまり、2つの親を持つ新しいコミット(現在のブランチの既存のコミットと、変更を適用したいコミット)が必要な場合、チェリーピックはそれを実現しません。
たとえば、ビルドプロセスでgitの祖先を利用して最新のタグに基づいてバージョン文字列を自動的に設定する場合(を使用git describe
)、真のマージ履歴があることが望ましい場合があります。
チェリーピックの代わりに、実際のを実行してgit merge --no-commit
から、手動でインデックスを調整して、不要な変更を削除できます。
あなたがブランチにいて、ブランチA
の先端にあるコミットをマージしたいとしますB
:
git checkout A
git merge --no-commit B
これで、2つの親を持つコミットを作成する準備が整いました。現在のヒントは、A
とのコミットですB
。ただし、Bブランチでの以前のコミットからの変更を含め、必要以上の変更が適用される場合があります。これらの不要な変更を元に戻し、コミットする必要があります。
(作業ディレクトリとインデックスの状態をマージ前の状態に戻す簡単な方法があるかもしれません。そうすれば、最初に必要なコミットをチェリーピックするためのクリーンなスレートが得られます。しかし、私はきれいなスレートを達成する方法がわからない。git checkout HEAD
そしてgit reset HEAD
、両方のこの方法の目的を破って、マージ状態を削除します。)
したがって、不要な変更を手動で元に戻します。たとえば、
git revert --no-commit 012ea56
不要なコミットごとに012ea56
。
調整が終わったら、コミットを作成します。
git commit -m "Merge in commit 823749a from B which tweaked the timeout code"
これで、必要な変更のみが可能になり、祖先ツリーにBから技術的にマージされたことが示されます。