2012-08-31 46 views
20

私のアプリケーションで新機能用のMercurialブランチを作成していますが、特定の機能を完了した後、そのブランチをデフォルトのブランチにマージし、この機能ブランチを閉じます。Merge後のMercurialブランチの削除方法

しかし、デフォルトブランチにマージされた変更を失うことなく、それらの名前付きブランチを完全に削除する方法があるのだろうか?

答えて

29

いいえありません。

2つのブランチをマージした場合、マージコミットは2つの親コミットの存在によって異なります。つまり、マージコミットを削除しない限り、マージされたブランチを構成しているコミットを削除することはできません。

これは物事を行う "Mercurialな方法"でもありません。ブランチが別のブランチにマージされ、そのブランチでそれ以上の開発が行われなかった場合、Mercurialはそのブランチがもうアクティブではないことを認識します。 hg branchesは、リストの一番下に非アクティブブランチを配置します。また、hg commit --close-branchを使用してブランチを閉じることもできます(-cパラメータが指定されていない限り、hg branchesリストからブランチが削除されます)。

これは、Mercurialキュー(MQ)を調べる必要があるように思えます。これは、記述したものと同様のワークフローをサポートするためです。たとえば、複数のMQキューを設定できます。これらのキューはそれぞれ、開発の分岐点を表します。

+7

あなたの答えは完璧に近いです必要な(と私はそれをupvotedしました)しかし、@lvicaはMQの前のブックマークを見るべきです。 MQは難しいです。それは本当のパワーツールであり、フェーズ(そしてまもなく廃止された)がここにある今、好意を失っています。一方、ブックマークは、永続的な名前のブランチが過度に機能する可能性がある、機能ごとの分割に最適です。 –

+0

@ Ry4anはい、私はそれらを忘れました。ブックマークを使用して削除後のマージをどのように処理しますか? –

+1

あなたは 'hg bookmark --delete bookmark_name'でブックマークを削除するだけです。たくさんの素晴らしい情報がここにあります:http://mercurial.selenic.com/wiki/Bookmarks/ –

0

アイデア:

ちょうどリモートサーバに私のマージ機能ブランチをプッシュする前に、私は考えた:「私は私はそれが存在しなかっ好むだろう、誰もが私の枝について知りたくありません」。だから私はリモートにプッシュする前に、すべてのローカル変更を1つのコミットに入れることに決めました。

アプローチ:

  1. クローン起源支店別のディレクトリへのリポジトリ:

    hg clone ssh://site//hg/repository repository-origin 
    hg clone /home/user/work/repository repository-branch 
    
  2. マージデフォルト機能リポジトリブランチ内部支店:

    cd repository-branch 
    hg merge feature-branch 
    hg commit -m "feature-branch: merging into default" 
    cd .. 
    
  3. マスターリポジトリの作成:

    rsync -av --exclude=".*" repository-branch/ repository 
    
  4. hg clone repository-origin repository 
    
  5. は(隠されたものを除く)リポジトリブランチファイルとマスター内のすべてのファイルを上書きしますすべてのchanをマージするシングルとマスターから機能枝からGESコミット:リモート

cd repository 
hg commit -m "feature-branch: merging into default" 
  • プッシュ最後の内部に不要な枝からのすべて/一部のコミットの情報を持っているのは良いかもしれませんコミットメッセージ。

    賛否/短所:

    • カボチャが一緒にコミットunpushed支店のための作品や失い情報
    • なし拡張子が
  • 関連する問題