5

共有リポジトリのローカルコピーを使用して一連のばかげた手順を実行しましたが、それを修正する方法を探しています。手順は次のとおりです。

  • 私はブックマークを使用して、他の人が使用する開発ブランチの複数のヘッドを作成しました。

    -o---o---o-----o---   <- dev branch
      \----1----1------   <- another head of the dev branch,
                             where I committed stuff
    
  • しばらくして、まだローカルの新しいブランチを作成しました

      /---------------x   <- new branch
    -o---o---o-----o---   <- dev branch
      \----1----1------   <- another head of the dev branch,
                             where I committed stuff
    
  • コードのみを含む1つのヘッドについて、別のブランチでリベースを実行しました

                       /-1'--1'--  <- rebase
      /---------------x            <- new branch
    -o---o---o-----o---            <- dev branch
      \----1----1------            <- another head of the dev branch,
                                      where I committed stuff
    
  • 次に、リベースをマージし、その後、いくつかのコミットを行った後、デフォルトをマージしました

                       ----------d-\      <-default
                                    \
                       /-1'--1'\     \
      /---------------x--------x--x-x-x-- <- new branch 
    -o---o---o-----o---         
      \----1----1------         
    

hg push --new-branch -b newBranchここで、新しいブランチをサーバー( )にプッシュしたかったのですがabort: push creates new remote head、コミット1'はdevブランチに属しているため、取得します。

正しいことは何ですか?この追加のヘッドを作成することは避けたいと思います。

更新

リクエストごとに、これは次の出力ですhg heads

changeset:   839:f2033d695fcd  <- want to push this
branch:      newBranch
tag:         tip
user:        me
date:        Wed Oct 31 13:05:51 2012 +0100

changeset:   826:7fde19d7f467
branch:      devBranch
user:        my-collegue
date:        Tue Oct 23 14:59:42 2012 +0200

changeset:   820:23853bbf68df  <- the part after rebase that got merged
branch:      devBranch
user:        me
date:        Mon Oct 22 15:36:26 2012 +0200

changeset:   807:899344cfb145  <- obsolete (branch with 1's)
branch:      devBranch
parent:      711:454f29c03fb1
user:        me
date:        Mon Oct 22 15:36:26 2012 +0200

changeset:   712:d5e8a62a7f5f  <- default, needs to stay
parent:      648:2bbcc01aa191
user:        me
date:        Wed Aug 22 16:21:09 2012 +0200
4

2 に答える 2

7

mercurial に興味のある 1 つのヘッドのみをプッシュできます。あなたにとって、それは次のことを意味します:

hg push -r f2033d695fcd

宛先リポジトリが更新されている場合は、プル、マージ、および再プッシュする必要があります。

hg pull
hg up -r <remote head>
hg merge -r f2033d695fcd
hg ci
hg push
于 2012-10-31T21:13:36.153 に答える
1

23853bbf68df別の頭をレポにプッシュしたり、にマージしたりすることなく、問題を解決しましnewBranchた。これはおそらく最もクリーンな方法ではありませんが、参考として残します。簡単に言えば、すべてのコミットを取得して再適用することで、ブランチ全体を再構築しました。

最初に、私が行った最初の分岐リビジョンで strip を使用して、 newBranch'es headを殺しました:899344cfb145

hg strip -r 646 

newBranch次に、開始以来、にあるすべてのコミットに対して電子メール パッチ (mq で再生できませんでした) を作成しました。

hg export -g -r 797:808 -r 810 -r 815:822 -r 824:830 -o "%n-%m.patch"
  • 797:808newBranchのリベース部分にあったパッチですdevBranch(1'元の図のコミット)。
  • 810815:822は のその他のパッチですnewBranch811:814別のブランチに属しているため、それらを除外する必要がありました。
  • 823は とのマージ コミットなdefaultので、これはスキップしました。
  • 824:830とのマージ後のすべてのコミットdefaultです。

ここで、これらのパッチを の新しいヘッドにインポートしましたnewBranch:

hg up -r 796
# there are 29 patches, applying till merge
hg import --bypass {01..21}*.patch
hg up tip
hg merge default
hg ci -m 'merging in default'
hg import --bypass {22..28}*.patch

最後に、 の元の頭部を取り除きましたnewBranch

hg strip -r 797

これは、すべての状況で機能するとは限りません。マージ中に、いくつかの競合も解決する必要がありましたが、問題はありませんでした。これが誰かに役立つことを願っています。

于 2012-11-02T13:13:34.573 に答える