別のリポジトリのブランチを現在のブランチにマージする方法を理解しようとしています。
私は以下を持っています:
PJT1-デフォルトのブランチと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
PJT1のfoodog
ブランチからPJT2のdefault
ブランチにコンテンツを取得するにはどうすればよいですか?
マージする必要がありますが、ブランチ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
は、ヘッドがあるブランチのみを表示するhg branches --active
を実行しない限り、foodog
を表示します。 commit --close-branch
を実行しないと、hg branches --closed
を実行しない限り、foodog
は表示されません。
Mercurialのブランチが完全になくなることはないため(設計機能)、release-1.0
やstable
のような生涯にわたるもののためにのみ予約されることがよくあります。バグや機能などの一時的な取り組みについては、代わりにブックマークを使用することを検討してください。 2つの優れた比較を以下に示します。 http://stevelosh.com/blog/2009/08/a-guide-to-branching-in-Mercurial
rebase 拡張子を使用することもできます。次のようになります。
hg fetch -y ../PJT1 -r foodog -m "this is a test"
hg rebase --source <sRev> --dest <dRev>
リベースアクションは、変更セットsRevおよびすべての子孫を切り離し、変更のグループを変更セットdRevに適用します。デフォルトでは、変更はデフォルトのブランチに適用されます。したがって、あなたの場合、sRevはブランチの最初のチェンジセットfoodogであり、dRevはdefaultチェンジセットですあなたはそれらを適用したいです。
最後に、これをオーバーライドしてソースブランチ名を保持する場合は、リベースオプション--keepbranches
を使用できます。あなたの質問は、これがまさにあなたがしたくないことであることを示していますが、それでも注意する必要があります。