1. ホーム
  2. mercurial

[解決済み] Mercurial は変更を新しいブランチに移動します。

2022-08-24 03:48:50

質問

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

どのように解決するのですか?

マークが提案したように MqExtension はあなたの問題に対する 1 つの解決策です。IMHO では、よりシンプルなワークフローとして リベースエクステンション . 例えば、このような履歴があるとします。

@  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

Markの回答に対するコメントで述べたように、すでにプッシュされたチェンジセットを移動することは、コミュニケーションと履歴操作を強制できる小さなチームで働いているのでなければ、一般に悪い考えです。