30

別のリポジトリから現在のリポジトリにブランチをマージする方法を理解しようとしています。

私は次のものを持っています:

PJT1 - ブランチ default および foodog が含まれています

PJT2 - ブランチのデフォルトを含む

PJT2 から、次のことを行います。

$ hg fetch -y ../PJT1 -r foodog -m "this is a test"

PJT2 を見ると、正しいファイルと変更が表示されます。ただし、hg branchesそうすると、次のようになります。

[someone@myhome pjt2]$ hg branches
foodog                         1:c1e14fde816b
default                        0:7b1adb938f71 (inactive)

そしてhg branch、次のことを明らかにします。

[someone@myhome pjt2]$ hg branch
foodog

foodogPJT1 のブランチから PJT2 のブランチにコンテンツを取得するにはどうすればよいdefaultですか?

4

2 に答える 2

55

マージする必要がありますが、ブランチ foodog の変更は常に foodog にあることに注意してください。ブランチは消えることはありませんが、非表示にすることができます。この一連のコマンドは、求めているものに最も近いものです。

cd PJT2
hg update default # just in case you were somewhere else
hg pull ../PJT1 -r foodog  # that gets you foodog
hg merge foodog  # that merges the changes into default
hg commit # commit the merge
hg update foodog # go to the most recent change in foodog (note: it is not a 'head')
hg commit --close-branch

マージ後も、ヘッドがあるブランチのみをhg branches表示foodogしない限り表示されます。hg branches --active後はやらなきゃcommit --close-branch見えfoodogないhg branches --closed

release-1.0Mercurial のブランチが完全になくなることはない (設計機能) ため、これらのブランチは、や などの生涯にわたるもののためにのみ予約されることがよくありますstable。バグや機能などの短期間の取り組みについては、代わりにブックマークの使用を検討してください。2 つの優れた比較を次に示します

于 2011-03-03T21:56:21.890 に答える
0

rebase拡張機能を使用することもできます。次のようになります。

hg fetch -y ../PJT1 -r foodog -m "this is a test"
hg rebase --source <sRev> --dest <dRev>

rebase アクションは、変更セットsRevとすべての子孫をデタッチし、変更のグループを変更セットdRevに適用します。デフォルトでは、変更はデフォルト ブランチに適用されます。したがって、あなたの場合、sRevはブランチfoodogの最初の変更セットになり、dRevはそれらを適用するデフォルトの変更セットになります。

最後に、これをオーバーライドしてソース ブランチ名を保持したい場合は、 rebase オプションを使用できます--keepbranches。あなたの質問は、これがまさにあなたがしたくないことであることを示していますが、それでも注意する必要があります。

于 2011-03-04T22:03:18.017 に答える