51

Hg リポジトリに 2 つのブランチがある場合、変更セットの他のすべてのファイルをマージせずに、1 つのファイルのみを別のブランチとマージする方法を教えてください。

変更セット全体ではなく、特定のファイルのみをマージすることはできますか?

4

4 に答える 4

59

警告: @Martin_Geisler で推奨されているような「ダミー マージ」は、後で 2 つのブランチの真のマージを実行する場合に、本当に混乱する可能性があります。ダミーのマージが記録され、ダミーのマージを行ったブランチにマージしたことを伝えます。変更は表示されません。または、別のブランチにマージすると、その別のブランチでの変更は取り消されます。

あるブランチから別のブランチにファイル全体をコピーすることだけが必要な場合は、次のように簡単に実行できます。

   hg update -r to-branch
   hg revert -r from-branch file
   hg ci -m 'copied single file from from-branch to to-branch

そのファイルの別の部分を選択したい場合は、 then"hg record"が便利です。

ホームディレクトリ .hgignore でこれを行いました。

両方のブランチが保持したいファイルに変更を加えた場合、おそらく/おそらくさらに別のブランチで hg merge を使用して2つのブランチのマージを作成し、それをチェックインしてから単一のファイルをコピーするという汚いトリックがありますマージと分岐先の間:

   hg update -r to-branch
   branch merge-branch
   hg merge -r from-branch
   hg ci -m 'temp merge to be discarded"
   hg update -r to-branch
   hg revert -r merge-branch single-file
   hg ci -m 'merged single-file from from-branch to to-branch"
   hg strip merge-branch

言及する価値があります:「ブランチ間で単一のファイルをコピーする」(またはリビジョン、またはリビジョンからマージへ、または...) 方法は「hg revert」です。いえ

   hg update -r Where-you-want-to-copy-to
   hg revert -r Where-you-want-to-copy-from file-you-want-to-copy
   ...
   hg ci

何らかの理由で、私と同僚の何人かは、これが非常に混乱していると感じています。"revert"=="copy" ... 一部の使用パターンでは意味がありますが、すべてではありません。

于 2012-10-26T04:19:10.437 に答える
18

いいえ。Mercurial は変更セットに基づいて動作します。

ただし、ブランチの 1 つからの受信変更を無視する「ダミー マージ」を実行できます。コミットする前に、選択したファイルを必要な状態に戻すことができます。

% HGMERGE=internal:local hg merge     # keep my files
% hg revert --rev other-branch a.txt  # update a.txt to other branch
% hg commit -m 'Dummy merge to pick a.txt from other-branch.'

多分それはあなたを少し助けるでしょう。

于 2009-07-03T14:02:46.730 に答える
1

vimdiffマージしたい2つのファイルを比較してマージするような外部ツールを使用するだけです。これの利点は、ファイルの一部を選択的に編集できることです。例えば:

hg update -r branch-merging-to
hg extdiff -p vimdiff -r branch-merging-from file-I-am-merging

これを行うには、.hgrc で外部ツールを有効にする必要があります。これは、次の行を追加することを意味します。

[extensions]
hgext.extdiff =  
于 2015-03-20T11:11:26.440 に答える