web-dev-qa-db-ja.com

新しいブランチへのMercurial Moveの変更

ローカルリポジトリにコミットした変更がいくつかありますが、まだプッシュされていません。機能では予想よりも時間がかかっているため、プッシュする前にこれらの変更を名前付きブランチにスワップしたいと思います。これどうやってするの?

123
Casebash

Markが提案したように、MqExtensionは問題の解決策の1つです。私見では、より単純なワークフローは rebase extension を使用することです。次のような履歴があるとします。

@  changeset:   2:81b92083cb1d
|  tag:         tip
|  summary:     my new feature: edit file a
|
o  changeset:   1:8bdc4508ac7b
|  summary:     my new feature: add file b
|
o  changeset:   0:d554afd54164
   summary:     initial

つまり、リビジョン0は、機能の開発を開始したベースです。これで、リビジョンが必要になります1-2名前付きブランチで、my-feature。改訂版に更新0そして、そのブランチを作成します:

$ hg up 0
$ hg branch my-feature
$ hg ci -m "start new branch my-feature"

履歴は次のようになります。

@  changeset:   3:b5939750b911
|  branch:      my-feature
|  tag:         tip
|  parent:      0:d554afd54164
|  summary:     start new branch my-feature
|
| o  changeset:   2:81b92083cb1d
| |  summary:     my new feature: edit file a
| |
| o  changeset:   1:8bdc4508ac7b
|/   summary:     my new feature: add file b
|
o  changeset:   0:d554afd54164
   summary:     initial

rebaseコマンドを使用して、リビジョンを移動します1-2リビジョン3

$ hg rebase -s 1 -d 3

これにより、次のグラフが表示されます。

@  changeset:   3:88a90f9bbde7
|  branch:      my-feature
|  tag:         tip
|  summary:     my new feature: edit file a
|
o  changeset:   2:38f5adf2cf4b
|  branch:      my-feature
|  summary:     my new feature: add file b
|
o  changeset:   1:b5939750b911
|  branch:      my-feature
|  summary:     start new branch my-feature
|
o  changeset:   0:d554afd54164
   summary:     initial

マークの答えへのコメントで述べたように、既にプッシュされたチェンジセットを移動することは、あなたが履歴操作を伝えて実施できる小さなチームで作業しない限り、一般に悪い考えです。

152
Oben Sonne

MqExtension を使用できます。移動するチェンジセットがリビジョン1〜3であるとします。

hg qimport -r 1:3    # convert revisions to patches
hg qpop -a           # remove all them from history
hg branch new        # start a new branch
hg qpush -a          # Push them all back into history
hg qfin -a           # finalize the patches
30
Mark Tolonen

here by Mark Tolonenによるパッチソリューションの説明が好き

私が持っているもの:

hg log -G

#default branch
@  changeset:   3:cb292fcdbde1
|
o  changeset:   2:e746dceba503
|
o  changeset:   1:2d50c7ab6b8f
|
o  changeset:   0:c22be856358b

私が欲しいもの:

  @  changeset:   3:0e85ae268e35
  |  branch:      feature/my_feature
  |
  o  changeset:   2:1450cb9ec349
  |  branch:      feature/my_feature
  |
  o  changeset:   1:7b9836f25f28
  |  branch:      feature/my_feature
  |
 /
|
o  changeset:   0:c22be856358b

mercurialsコマンド:

hg export -o feature.diff 1 2 3
hg update 0
hg branch feature/my_feature
hg import feature.diff

ここに私のローカルリポジトリの状態があります

@  changeset:   6:0e85ae268e35
|  branch:      feature/my_feature
|
o  changeset:   5:1450cb9ec349
|  branch:      feature/my_feature
|
o  changeset:   4:7b9836f25f28
|  branch:      feature/my_feature
|
| o  changeset:   3:cb292fcdbde1
| |
| o  changeset:   2:e746dceba503
| |
| o  changeset:   1:2d50c7ab6b8f
|/
|
o  changeset:   0:c22be856358b

次に、デフォルトのブランチからリビジョン1 2および3を削除する必要があります。これは、mqの拡張機能からstripコマンドを使用して実行できます。 hg stripは、変更セットとそのすべての子孫をリポジトリから削除します。

構成ファイル(.hgrcまたはMercurial.ini)に次の行を追加して、拡張機能を有効にします。

vim ~/.hgrcおよび追加:

[extensions]
mq =

そして、リビジョン1でこのリポジトリを削除します。

hg strip 1

そしてここにいる

@  changeset:   3:0e85ae268e35
|  branch:      feature/my_feature
|
o  changeset:   2:1450cb9ec349
|  branch:      feature/my_feature
|
o  changeset:   1:7b9836f25f28
|  branch:      feature/my_feature
|
o  changeset:   0:c22be856358b

注:変更セットは異なりますが、リビジョンは同じです

9

GUIを使用したい人向け

  1. Tortoise Hg-> File-> Settingsに移動し、rebaseにチェックマークを付けます。

enter image description here

  1. トータスUIを再起動します

  2. 変更を移動する新しいブランチを作成します。現在のブランチ名をクリック-> Open a new named branchを選択->ブランチ名を選択.

enter image description here

  1. 移動したい変更がpublic(例:draft)になっていない場合は、5に進みます(変更が既に公開されていて、上級開発者でない場合は、上級者に相談する必要があります(スケープゴートを取得します)あなたが物事を大きな時間を台無しにするかもしれないので、私は責任を負いません:))。

View-> Show Console(または Ctrl + L)次に、コンソールに書き込みますhg phase -f -d 2-2が新しいブランチに移動する最下位のリビジョンです。

  1. ブランチとリビジョンに移動します(手順3で作成した新しいブランチに変更を移動する場合は、最上位のリビジョンにする必要があります)Right Mouse-> Update

  2. Right Mouse-> Modify History-> Rebaseから変更を移動するブランチとリビジョンに移動します

enter image description here

  1. Rebaseをクリックし、競合がないことを祈ってください。必要であればマージします。

  2. 変更をプッシュします。この時点で、すべてのリビジョンはまだdraftのままです。

  3. 変更を移動したブランチの最上位リビジョンにRight Mouse-> Change Phase to-> Publicに移動します。

enter image description here

これで時間を節約できることを願っています。

5