web-dev-qa-db-ja.com

TortoiseHgを介したMercurial-名前付きブランチをマージして閉じます

デフォルトのブランチから作成した名前付きブランチNewFeatureがあります。そのブランチに2回コミットしましたが、今度はそれをマージしてデフォルトのブランチに再度参加させたいと思います。

今(各手紙はコミットです):

   default: A---B
NewFeature:      \--C---D

私が欲しいもの:

   default: A---B-----------E
NewFeature:      \--C---D--/

ディレクトリを右クリックして「Hg Commit ...」を選択してみました。次に、「現在の名前付きブランチを閉じる」を選択しました。私はこのエラーを受け取りました:abort: can only close branch heads

また、リポジトリエクスプローラーで「ブランチを閉じる」オプションを探しましたが、何も見つかりませんでした。

誰か助けてくれませんか?前もって感謝します!

編集: issue をTortoiseHgに投稿しました

32
sharoz

マージするには、クリーンな作業コピーが必要です-コミットされていない変更はありません。マージはレビューのために作業コピーに配置され、作業コピーをコミットしてマージを「完了」します。

コミットする準備が整っていないコミットされていない変更がある場合は、それらの変更を一時的に保留にするか(該当する拡張機能がある場合)、マージに使用する別の場所に新しい作業コピーをチェックアウトできます。

リポジトリエクスプローラを使用する:

  1. Update revへの作業コピーB

  2. 変更履歴のrev D行を選択します。

  3. Rev Dを右クリックし、Merge with...を選択します。ダイアログはrevを表示する必要がありますBはローカルrevであり、Dは他のrevである必要があります。

  4. マージダイアログでMergeをクリックし、競合があれば解決します。

これまで、リポジトリには何も変更されていません。マージは作業コピーにあります。したがって、何か問題がある場合は、マージをキャンセルし、作業ディレクトリを元に戻して、後で、または他のブランチやトランクに変更を加えた後でやり直すことができます。

手順1〜4の後で問題がなければ、マージダイアログのCommitをクリックしてマージをコミットします。

23
Bert F

あなたが与える例は、実際のCloseよりもMergeです。また、それが単純な場合、おそらく名前付きブランチを作成する必要はありません。

しかし本当にブランチを閉じたい場合 TortoiseHgを通じて、例えば

  1. newFeatureブランチを作成した
  2. 次に、DefaultブランチとNewFeatureブランチの両方が変更されました
  3. 次に、NewFeatureブランチにかなり時間がかかる場合は、すでにDefaultをNewFeatureに数回マージしている可能性があります(NewFeatureブランチをDefaultブランチに最後にマージするときに、あまりにも多くの違いが生じないようにするため)
  4. 最終的に新しい機能は完全に実装されるか、十分に安定しているため、NewFeatureブランチをデフォルトの機能にマージしました

これからは、誰もNewFeatureブランチで何かをコミットすることになっていないので、それを閉じます。

TortoiseHgでこれを行うことができます(私はバージョン2.3.2を持っています):

  1. クリックHgコミット...場合NewFeatureブランチ上(コミットする必要はありません-または、最終的なマージで実行します)
  2. 「Branch:NewFeature」をクリック(太字で上部にあります)
  3. 「現在のブランチを閉じる」を選択
42
user276648

この質問への回答で混乱している人のために、TortoiseHgワークベンチ内からこれを行う方法の手順を次に示します。

機能ブランチをマージしてブランチを閉じる方法

  1. TortoiseHgワークベンチを開きます。
  2. レジストリリポジトリからリポジトリを選択します。
  3. ブランチをマージしたいブランチに切り替えます(この例ではデフォルト):

Switch to the default branch

  1. マージして閉じるブランチ(この例ではNewFeature)を右クリックし、Merge with Localを選択します。これにより、NewFeatureブランチからのブランチの変更がdefaultにマージされます。

Merge one branch into another

  1. 変更が1つのブランチから別のブランチにマージされることを確認する確認ボックスが表示されたら、次の手順をクリックします次へ、今すぐコミットして完了

Confirmation box

  1. 変更がマージされたことをグラフから確認できるようになりました。NewFeatureブランチは不要になったので閉じることができます。

Branch merge graph

  1. 閉じたいブランチにローカルを更新します。この場合はNewFeatureです。

Update to branch to close

  1. ワークベンチの上部にある大きな緑色のチェックマークcommitをクリックします。 Big green tick

  2. コミットウィンドウで、コメントテキストボックスの上に、閉じたいブランチが表示されます。ブランチ名をクリックします。

Commit window with branch name we want to close

  1. ウィンドウがポップアップし、現在のブランチを閉じるを選択します。

Close current branch

  1. コミットをクリックします。グラフには、ブランチが閉じていることが示されます。

Graph showing closed branch

17
Luke

TortoiseHgでは、コミットダイアログを使用する前に、作業コピーを閉じたいブランチの先端に更新する必要があります。

ブランチを閉じると、ブランチの先端に新しいチェンジセットが作成されます。

説明したエラー(abort: can only close branch heads)は通常、名前付きブランチの先端ではないチェンジセットに更新した場合に発生します。

1
Tim Henigan

また、ブランチが既に閉じている場合、つまり閉じたブランチを閉じようとすると、このエラーが発生するようです。より役立つエラーメッセージが役立ちます。

1
nicodemus13