web-dev-qa-db-ja.com

Mercurialに新しいブランチを作成する:「アボート:プッシュが新しいリモートヘッドを作成する」

私は非常に単純なことをしようとしています:新しいブランチを作成します。しかし、私はめちゃくちゃになりました。どこでミスをしましたか、そしてどのようにそれを修正しますか?

Mercurialの唯一のユーザーです。リビジョン54をコミットしてリモートリポジトリにプッシュしました。リビジョン53に基づいてブランチを作成したかったので、ローカルコピーをリビジョン53に更新し、変更を加えてコミットしました(「先頭ではない」という警告は無視)。次に、リモートリポジトリにプッシュしようとすると、

abort: Push creates new remote head

Mercurialに新しいブランチを作成したいことを伝える必要があったのでしょうか?もしそうなら、どのように、どの時点で?

ありがとう!

28
max

Mercurialにそれを続行できると伝えます

$ hg Push --force

複数の(名前のない)ヘッドは通常推奨されないため、強制する必要があります。それらの問題は、リポジトリのクローンを作成する人がどちらを使用するかを知らないことです。しかし、あなたは唯一のユーザーなので、先に進んでプッシュすることができます。

代わりに、 名前付きブランチhg branchを使用)を使用することもできます。

$ hg Push --new-branch

リモート上に新しいブランチを作成できるようにします。 名前付きブランチ には、2つのブランチを簡単に区別できるという利点があります。それらは永続的であるという欠点があります。永続的とは、ブランチのチェンジセットからブランチ名を削除できないことを意味します。名前は、文字どおり直接チェンジセットに焼き付けられます。

Bookmarks 非永続的なブランチ名を持つ方法を提供します。hg help bookmarksを参照してください。

36
Martin Geisler

このエラーのもう1つの理由:おそらく、デフォルトのブランチの中央リポジトリから、マージされていない変更がいくつかあるでしょう。

hg up default
hg merge
hg ci -m "Merge"
hg pus
1
Alex

これは私がしました。 TortoiseHgを使用する...これが私が修正した方法です:

設定で、ストリップ拡張を有効にしてから、不要なブランチ、変更履歴-ストリップを右クリックしました。プッシュした場合は、不要なブランチをプルした同僚を含め、他のすべてのリポジトリからストリップする必要があります。

もう1つの方法は、不要なブランチをメインブランチにマージすることですが、そのブランチからの変更は行わないでください。そのメカニズムがどのように機能するかはわかりません。

0
Ruskin