回答:
Markが提案したように、MqExtensionは問題の解決策の1つです。私見の簡単なワークフローは、リベース拡張を使用することです。次のような履歴があるとします。
@ 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
マークの回答へのコメントで述べたように、履歴の操作をやり取りして実施できる小さなチームで作業しない限り、すでにプッシュされたチェンジセットを移動することは一般的に悪い考えです。
fold
、現在組み込まれているhistedit拡張機能のコマンドを使用して)。
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
私はここで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
水銀コマンド:
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
注:チェンジセットは異なりますが、リビジョンは同じです
GUIを使いたい方
Tortoise Hg
-> File
->に移動してSettings
、チェックマークを付けrebase
ます。亀のUIを再起動します
変更を移動する新しいブランチを作成します。現在のブランチ名をクリック->選択Open a new named branch
->ブランチ名を選択。
public
(例draft
)は5に進みます(変更がすでに公開されており、上級開発者でない場合は、何かをかなり混乱させる可能性があるため、上級者に相談する(スケープゴートを取得する)必要があります。 、私は責任を負いません:))。移動しますView
> - Show Console
(またはCtrl+ L)、コンソールに書き込みhg phase -f -d 2
- 2が最低の改正がどこにある新しいブランチに移動されます。
ブランチとリビジョンに移動します(手順3で作成した新しいブランチに変更を移動する場合は、一番上のリビジョンにする必要があります)Right Mouse
->Update
ブランチとリビジョンに移動しますRight Mouse
-> Modify History
-> から変更を移動しますRebase
クリックしてRebase
競合がないことを祈り、必要に応じてマージします。
変更をプッシュします。この時点では、すべてのリビジョンはまだですdraft
。
変更をRight Mouse
-> Change Phase to
->に移動したブランチの最上位リビジョンに移動しますPublic
。
これにより時間を節約できることを願っています。
public
自動的に変更されません(少なくとも私にとっては変更されません)。