ローカルリポジトリにコミットした変更がいくつかありますが、まだプッシュされていません。機能では予想よりも時間がかかっているため、プッシュする前にこれらの変更を名前付きブランチにスワップしたいと思います。これどうやってするの?
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
マークの答えへのコメントで述べたように、既にプッシュされたチェンジセットを移動することは、あなたが履歴操作を伝えて実施できる小さなチームで作業しない限り、一般に悪い考えです。
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
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
注:変更セットは異なりますが、リビジョンは同じです
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
に移動します。
これで時間を節約できることを願っています。