web-dev-qa-db-ja.com

「プッシュにより新しいリモートヘッドが作成される」問題

この問題に関するすべてのSOの質問を読みましたが、まだ解決できません。

TortoiseHgを使用しています。私はサイドブランチに取り組んでいましたが、今度はそれをメインブランチにマージして戻したいと思います。両方のブランチで行われたすべての変更をプルし、メインブランチに更新して、マージ(およびコミット)しました。しかし、これをすべてプッシュしようとすると、「abort:Pushは新しいリモートヘッドを作成します」というメッセージが表示されます。

また、(SOの質問の1つで提案されているように)--close-branchオプションを使用してブランチを閉じようとしました。

私が試しなかったのは、プッシュを「強制」することだけです。助言がありますか?それとも、強制的に押すことが唯一の選択肢ですか?

See screenshot

13
Itamar Katz

同様の設定を試したところ、同じ警告が表示されます。どうやら、プッシュしようとしている2番目のヘッドは閉じていますが、プッシュ中は別のヘッドとして表示されます。そして、両方の頭を閉じることはプッシュ可能でもないようです。

プッシュを強制することはできますが、問題はありませんが、チェンジセット14と20ですでに行っているように、visualizationブランチに複数のヘッドを保持すると、最終的に同じ問題が発生する可能性があります。代わりに、両方のチェンジセット(14と20)をマージして、最後のヘッドを再度閉じることをお勧めします。

7
Vince

この問題に遭遇した他のすべての人のためだけに。私にとってこの問題の原因は、新しいブランチでの作業を開始する前にプッシュしなかったデフォルトブランチのローカルリビジョンでした。

デフォルトブランチ用にプルした最新のリビジョンを新しいブランチとマージしましたが、ローカルの変更はデフォルトブランチコミットされたままになりますがプッシュされていません。

それらをプッシュしようとすると、リモートヘッドを作成しているのは新しいブランチではなく、リモートヘッドを作成しているデフォルトブランチのプッシュされていないリビジョンです。

Hg strip -r1234でこれらのリビジョンを削除したとき

hg Push --new-branch 

完璧になりました。

私を正しい軌道に乗せたのは

hg heads

示されているように、2つのヘッドがあり、どちらもリビジョン番号が異なるデフォルトのブランチの名前を持っていました。

8
gijswijs

答えてくれてありがとう、私は間違いなくいくつかの新しいトリックを学びました。

私がやったことは、remoteリポジトリ、つまり、マージなどのすべてのコミットがないリポジトリから初期のリビジョンを複製することです。次に、変更セットをプルして、マージしました。 、およびコミットしました。その後、プッシュはついに成功しました。

基本的には以前と同じ手順でしたが、最初の(失敗した)試行で、必要以上の手順に分割し、ある時点で問題が発生したようです。

1
Itamar Katz

このソリューションを試してください、

仮定。リモートでブランチを閉じて作成するのに十分な権限があります

これは、履歴を書き直そうとしているために発生します。 hg Push -fを試してみてください。これにより、リモートリポジトリに2つのヘッドが作成されますが、そうでない場合もあります。

したがって、リモートに最初にログインしてブランチを閉じ、次にローカルにアクセスしてhg Push -fを使用してプッシュします。必要な新しいブランチは、以前の状態で自動的に作成されます。

0
nehem