3

私のユースケースはこれです:

私は新しい機能に取り組んでおり、その機能についていくつかコミットしています。これはマイナーな機能だったので、機能ブランチで機能を実行することさえ考えていませんでした。

でも。今、上司がやって来て、私が取り組んでいるのと同じブランチ (デフォルト) のバグを修正するように言いました。

自分の機能の機能ブランチを作成したいということを修正するには、既存の (プッシュされていない) コミットをすべてそのブランチにプッシュします。

したがって、最初のコミットの直前にブランチを作成し、何らかの方法ですべてのコミットをそのブランチに移動したいと思います。

これどうやってするの?

4

3 に答える 3

3

好みに応じて、これにアプローチする2つの方法があります。

  1. 新しいリポジトリ内。

    リポジトリの新しいクローンを作成し、そこで作成する必要のあるバグ修正を行います。次に、完了したらそれをメインリポジトリにプッシュし、元のリポジトリで中断したところから続行します。プルしてマージし、通常どおり新しい変更を取得します。

  2. 既存のリポジトリ内。

    ローカルで変更する前にチェンジセットを更新し、そこで修正とコミットを開始します。これにより、新しい匿名ブランチが作成されます。完了したら、を使用してプッシュします。push -r .これにより、作業コピーに含まれている変更のみがプッシュされます。この後、元のブランチ()とマージし、hg merge中断したところから続行します。

    hg bookmark変更にラベルを付けないでおくことに抵抗がある場合は、機能ブランチをブックマークできることに注意してください。また、を使用して残した頭を簡単に見つけることができますhg heads

個人的には、新しいクリーンクローンで作業することを好みます。これは、分岐やコミットされていない変更をどこに残すかについて心配する必要がないためです。ただし、プロジェクトの設定が複雑な場合は、既存のリポジトリを再利用する方が便利な場合があります。

于 2012-10-25T12:19:13.090 に答える
3

この状況では、リベースによって修正できます (構成で有効にする必要がある場合があります)。

ブランチで、移動する変更セットの前のリビジョンに更新します。

hg up -r<revison>

これは、連続したリビジョンを移動する必要があることを前提としています。

新しいブランチを作成します。

hg branch "TempWork"

新しいリビジョンを取得するためにダミーのコミットを入れます:

hg commit -m"New Branch"

次に、移動する最初の変更セットからリベースを実行し (子孫を自動的に移動します)、新しいブランチ リビジョンを移動先として指定します。

hg rebase -s<base revision> -d<new branch revision>

次に、メインライン ブランチに更新します。

于 2012-10-25T10:08:08.620 に答える
1

4番目の方法:mq-patchesを使用する

  • mq拡張機能を有効にして、リポジトリに対して開始する必要があります

修正プログラムの瞬間にあなたは

  • feature-commitsをmq-patchesのセットに変換します(hg qimport
  • セット内のすべてのパッチを適用解除します(hg qpop -a
  • コード修正プログラム、コミット
  • ..。
  • クリーンなコードベースで修正プログラムを終了してテストします
  • セット内のすべてのパッチを適用し(hg qpush -a)、発生する可能性のある競合を修正します
  • パッチをチェンジセットに戻す(hg qfinish
于 2012-10-25T14:57:03.390 に答える