2

私はブランチ B にいます。一連のコミットの後、いくつかのファイルはブランチ A で準備ができている/必要ですが、多くは準備ができていない/必要ではありません。適切な git 履歴を保持しながら、それらのファイルだけをマージしたいと考えています。後で実際にマージするとき、これらの変更の起源について誤解を招くような痕跡は望んでいません。それらのコミットの一部であった他のファイルの変更がマージされなかったとしても、元のコミットを適切に参照する必要があります (まだ)。これは、コミットを、これらのファイルに関係するものと関係しないものに分割することを意味すると思います。

これに対して提案されたすべてのソリューションは、これらの変更の履歴を失い、後で B を A にマージしたいときに B の変更の一部が既に存在する場合に大きな問題を引き起こします。これを回避するソリューションが必要です。

Tortoise では、1 つのファイルのログを見て、元に戻す古いリビジョンを選択できます。したがって、原則として、B から新しいブランチ C を作成し、マージしたくないすべてのファイルを、B が A から分岐した時点に戻すことができます。その後、C を A にマージできます。 Git の履歴を追跡し、B の変更が既に存在することに驚かずに B を A にマージできるようにします。

しかし、2 個のファイルをマージしたいだけなのに、手動で 20 個のファイルを識別して元に戻すのは大変です。これが一般的なワンステップ操作ではないのはなぜですか? tortoise の revert はどのように機能しますか? 単一のファイルを操作できるため、サブコミットである必要があります。これは、私が探している重要な機能です。新しいリビジョンから古いリビジョンに移行しようとしているという事実を捨てて、B を A に戻す最終的なマージと競合する手動の変更を加えたように見せかけているのでしょうか?

4

2 に答える 2

1

cherry pickマージするブランチから特定のコミットのみを選択する方法を探しています。

特定のファイルのみをマージするには(コミット全体をマージしたくない場合)、実際には複数のソリューションがあります。この記事でよく表現されているものを使用するのが好きです。とにかくお尻の痛みですが、少し簡単です。私はそのようなことを見つけました。

また、いくつかのコミットを分割して、適切なファイルを含むコミットのみをマージすることもできます。他の記事にあるように行うことができます。

于 2012-06-07T13:48:04.433 に答える
0

Git はファイル トラッカーではなくコンテンツ トラッカーであるため、これは一般的なワンステップ操作ではありません。

Tortoise のように、ブランチ B からブランチ A に特定のファイルに変更を簡単に適用できます。

# raw file, no history
git checkout A
git checkout B myfile

また

# copy a set of history from someplace else
git checkout A
git cherry-pick commit-hash-1..commit-hash-2

しかし、どちらもブランチ B からのマージとして履歴を保持しません。ブランチ B のコミットがどのように編成されているかによっては、これがあなたにとってより良いかもしれません: Git: メジャー バージョンの区分的マージ アプローチ変化?

于 2012-06-07T14:12:13.307 に答える