2010-11-30 13 views
7

私はMercurialを使用しており、初心者の方です。私はちょうど私のレポに変更をコミットした後、hg pullhg updateを正常に実行しました - マージはなく、競合は現れませんでした。Mercurial:デフォルトブランチにプッシュする方法は?

は、その後、私はリモートレポにプッシュしようとした、と恐れられたのだ:abort: push creates new remote heads!

hg glogは、次のことを示しています。誰かがあるレポで新しいブランチを作成しているよう

@ changeset: 576:c4c58970f141 
| tag:   tip 
| user:  me 
| parent:  566:70e287df5439 
| 
| o changeset: 575:7ae70ddd2b6e 
| | branch:  mongo 
| | 
| o changeset: 574:904da90475ef 
| | branch:  mongo 
| | 
| o changeset: 567:cad7a006965b 
|/ branch:  mongo 
| 
o changeset: 566:70e287df5439 
| user:  me 
| 

が見えますfine:私は変更をデフォルトのブランチにプッシュしたいだけですが、私はどのように変更するのか分かりません。

チェンジセット576をプッシュするにはどうすればよいですか?ブランチをデフォルトにすることを指定する必要がありますか?

+1

新しいヘッドをプッシュし、このブランチとマージしたくないのですか? –

+0

私は間違いなく、mongoブランチにプッシュしたくありません:私はそれを別にしておきたいと思います。 – AP257

答えて

9

Mercurialのプッシュコマンドは、指定されたリビジョンまでの変更へのプッシュを制限する-rオプションがあります:

-rもし/ - revが使用され、指定したリビジョンとそのすべての祖先意志を をリモートリポジトリにプッシュしてください。

これは、プッシュする分岐も制限していることを意味します。デフォルトの枝の先端までのすべての変更をプッシュするには、あなたが実行できます。

$ hg push -r default 

をこれはあなたのモンゴ枝を無視します。限りリビジョン576は、デフォルトの枝の先端であるとして、両方のコマンドは、同じ効果を持って、明らかに

$ hg push -r 576 

:代わりにブランチ名を、あなたはまた、特定のリビジョンを使用することができます。サイドノートでは

、現在のリビジョン指定子としてピリオドを使用して、作業コピーをチェックアウトするだけの親リビジョンプッシュすることが多い便利なショートカットがあります:

$ hg push -r . 
+0

これは充実したアドバイスですが、この場合はそれを考え直すようです。彼は、リモートヘッドの作成を避けるマージ/リベースを行うために、最初にデフォルトのブランチをプルする必要があったようです。 –

4

Mercurialは常にリモートで新しいヘッドを作成するに文句を言うだろう、この

上のごく最近の議論を参照してください。新しいヘッドを作成するときは、--forceまたは--new-branchを使用する必要があります。

[編集:]

これは彼がリモートリポジトリに複数のヘッドを導入していることをユーザーに認識させるために、具体的です。通常、プッシュコマンドを使用してヘッドを作成するのではなく、リモートレポに複数のヘッドを作成する場合(通常は中央レポです)。

バイナリファイルとして、完璧に言えば、これはマージを上に押し出します。それは良いことではありません。

+0

私は力を使うことを心配しています。私は "-new-branch default"などを使用すべきでしょうか? – AP257

+0

@ AP257:はい。 "-new-branch .."を使う方が良いです。私の編集を見てください。 – pyfunc

+0

@ AP257:重要な考慮事項が1つあるOben Sonneの答えも見てください。デフォルトのヘッドの変更をリモートのリポジトリにプッシュし、複数のヘッドをローカルに持ち続けることが必要な場合もあります。そのような場合には、彼の答えも適用される。 – pyfunc

5

何か他のものがあるために起こっているがmongoのようなリモートブランチは、複数のヘッドアボートを引き起こさず、同じブランチ上の複数のヘッドだけが行います。 [更新:実際には、あなたがリモートブランチは、私が行ったようにあなたがPush new branchがあなたのTortoiseHgのの同期メニューで確認していない限り、リモートヘッドに類似したが、中止、中止のですか。]

ありませんが、適切な、原因が重要で手順はが及び、最終的には、プッシュレポへマージされた変更に結果をコミットし、あなたとそれらをマージし、リモート変更をプルそして、(あなたがやった)あなたの地元のレポにコミットすることです。

fetchという拡張子があり、このプロセスを1つのステップに統合するのに役立ちます。あなたはそれについてもっと学ぶことができますhere

プッシュをリモートレポに強制しないでください!これは、マージの責任を回避するだけであり、分岐していない行にすべての変更を加えることに依存しているビルドシステムなど、物事を壊すことさえあります。少なくとも、あなたが働いている人を混乱させたり、苛立ったりします。それがあなたの意図である場合を除き、その場合は完全なスチームを先送りしてください。 :)

実際に作業を開始する前に、コラボレーションに関する基本的なことを読む必要があります。開始here

+0

+1、これはまあまあのアドバイスです。 – pyfunc

+0

良いアドバイス、リンクありがとう。 – AP257

関連する問題