2011-09-14 5 views
6

コミットされていないチェンジセットがあります。私は現在間違ったブランチにいることに気づいたので、私がこれをコミットする前に、私が立ち向かっていたブランチに切り替えてコミットしたいと思います。Hgが間違った支店にほとんど託しました

これはHgでどれくらい難しいですか?

+0

私はMercurialがGitに非常に似ていると信じています。私はあなたに2つの選択肢があると信じています。追加および変更したすべてのファイルを手動で保存し、ブランチを切り替えてファイルシステムの上にコピーします。または、現在のブランチの変更をコミットし、本当に必要なブランチに切り替えて、前のブランチからマージします。 –

答えて

5

現在の親リビジョンとターゲットリビジョン間の直線経路がある場合、あなただけの

hg update right-branch 

を発行することができますし、Mercurialがターゲットリビジョンに作業コピーの変更をマージします。

これは、フルマージツールのを使用して行われます。したがって、名前の変更のようなことが考慮されます。競合が発生した場合は、3ウェイマージプログラムが適用されます。シェルフベースと差分ベースのアプローチにはこれがなく、.rejファイルを使用して手作業で競合を修正する必要があります。 hg resolve --listで現在のマージステータスを確認し、Mercurialが必要なバックアップを作成してから選択したファイルを再マージすることもできます。

直線経路が存在しない場合は、この警告が表示されます:

abort: crosses branches (merge branches or use --clean to discard changes) 

あなたは、あなたが最初の共通の祖先に戻って更新し、再度前方更新することで、欲しいものを得ることができます。私はこの警告を発行する理由を100%確信しているわけではありませんが、好奇心が強い場合は、メーリングリストのアーカイブを検索すると答えが得られます。

1

残念ながら、Mercurialはあなたが一時的にコミットするようにする必要があり、適切なブランチへの転送、それはrebaseまたはtramsplantを使用してやdiffを作成し、それを手動で適用しますので、箱から出して、棚をサポートしていません。また、あなたがTortoiseHgのを使用している場合、それはTHG(http://tortoisehg.bitbucket.io/manual/2.9/shelve.html)の棚の能力を達成するためには非常に簡単ですhttps://www.mercurial-scm.org/wiki/ShelveExtensionhttps://www.mercurial-scm.org/wiki/AtticExtension

2

を参照してください、サードパーティ製の拡張機能を棚上げ使用することができます。コミットダイアログでは、Shelveボタン(アイコンがZを重ねたファイル)をクリックし、二重右矢印をクリックしてすべての変更を保存します。棚のダイアログを閉じ、正しいチェンジセットに更新し、棚のダイアログを開き、二重左矢印をクリックして棚を抜く。

THGを使用していない場合は、hgshelve拡張機能(https://www.mercurial-scm.org/wiki/ShelveExtension)をインストールできますが、私はそれに精通していません。

Mercurial Queues(http://mercurial.808500.n3.nabble.com/Shelve-extension-td802439.html)でも同じ結果が得られるようです。

3

あなたはシェルフ延長せずにこれを実行したい場合は、次の手順を実行します。../work_in_progress.patchは、あなたが望む任意のパスが(私は通常ちょうど私のリポジトリ上の私のパッチを保存)することができ

hg diff --git > ../work_in_progress.patch 
hg up desired-branch 
hg import --no-commit ../work_in_progress.patch 

desired-branchがあります実際に変更を適用したいブランチです。

私が見つけた解決策は、あなたがいるブランチとあなたが行っているブランチが異なっていて、パッチがスムーズに適用されない場合には、はっきりと分かり始めます。その場合、競合を手動で解決する必要が生じます。

関連する問題