2010-12-06 10 views
20

私は2つのヘッドを持っています。 "A"(良いヘッド)と "B"(悪いヘッド)と呼んでいます。私はAからBのものをすべて取って、それらをマージしたい。水銀 - 1つのチェンジセットを放棄することによって "マージ"

私はhg mergeを試してみると、このファイルとそのことについて私に尋ねると、必然的にまずいことになる。私はそれを望んでいない!できれば中間ステップを使わずに、それらをマージしてAで終わらせる方法を教えてください。

答えて

18

一つのこと:

hg --config ui.merge=internal:fail merge X 
hg revert --all --rev . 

他のアプローチがに記載されている:

はやる、通ってくるXからの変更のいずれかをさせることなく、現在のリビジョンにXをマージするには私は近づいて来て、いくつかの個人レポジスで最近使用し始めたのは、ちょうどコミットでクローズドブランチスイッチを使用していたことです。例えば私の推論で

$ hg update B 
$ hg commit --close-branch -m "Abandoning branch" 

あなたは完全に他の賛成で離れて1つのブランチを吹いている場合、それは単にマージではありません、それはそれ、それを呼び出すために愚かです。私は自分自身では比較的新しいので、最初からクローズドブランチがありませんでした。それが、私が通常目にしている合併の旋回と同じくらいの牽引力を持たない理由かもしれません。

+2

同意します。あなたが悪い*ブランチを持っているなら、ブランチを閉じるか、それを取り除くことによってそれを取り除くべきです。それをマージすると、* bad *ブランチが履歴グラフの固有の部分になります。*良い*将来の変更はそれを祖先として持ちますが、実際にはそれを放棄しました。 –

+0

"close-branch"の使用とmerge = internal:localを使用する場合の機能的な違いは何ですか?それはhgのログ出力で異なって見えますか? –

27

第22節のMercurialヒントから。マージを行う際には、「My」または「Their」ファイルを保存してください。時折

次の2つのヘッドをマージしたい、しかし、あなたは頭の1、いわゆるダミーマージからのすべての変更を破棄します。あなたはui.merge構成エントリを使用して、マージを無効にすることができます:

ここ
$ hg --config ui.merge=internal:local merge #keep my files 
$ hg --config ui.merge=internal:other merge #keep their files 

ローカル手段作業ディレクトリの親を、他のあなたとマージしたいヘッドです。これにより、他のヘッドからの更新は除外されます。 https://www.mercurial-scm.org/wiki/PruningDeadBranches

$ hg update -C tip # jump to one head 
$ hg merge otherhead # merge in the other head 
$ hg revert -a -r tip # undo all the changes from the merge 
$ hg commit -m "eliminate other head" # create new tip identical to the old 
+0

元の質問は真のマージのためのものではないかもしれませんが、これは私の問題のために見つけた最初の答えでした。そして、私はMercurial MergeとTips and Tricksのページにも触れました。ありがとう! –

+1

hgは、内部:ローカルマージアルゴリズムを使用して、 "other"ブランチから新しいファイルを追加することが報告されています。それはバグのようですが、注意してください。 –

関連する問題