1

私はMercurialリポジトリに取り組んでおり、一連のパッチの作業にpbrachを使用しています。

2つのファイルAとBがあり、2つのパッチpatchA(Aを変更)とpatchAB(AとBを変更)があるとします。pgraphは次のようになります。

o  patchAB
|
@  patchA
|
o  default

誤って、ファイルBの変更をpatchAにコミットしました。

パッチAを2つの部分に分割して、最終的に次のようにする方法:patchA = patchA'+ newPatch、ここで、patchA =元のパッチ、patchA' =ファイルAのpatchAの変更、P2=ファイルBのpatchAの変更。

o  patchAB
|
| o newPatch // rest of original patchA without changes already in patchA'
|/
@  patchA' // with only the changes to file A
|
o  default

(私はmqでパッチを分割するのに似たものを検索しますが、pbranchを検索します)。

4

1 に答える 1

2

最後に、私は比較的短い解決策を自分で見つけました。

最初に、最後の「良い」コミット(たとえば1)と間違ったコミット(たとえば2)のリビジョン番号を取得します。

1)patchAに更新し、fileBの変更を元に戻し、コミットして、変更を上向きに変更します。

hg up patchA
hg revert -r1 fileB  // get fileB before the wrong change
hg commit -m"revert fileB"
hg pmerge -a

2)patchAに再度更新し、間違ったコミットを元に戻して、新しいパッチを作成します。

hg up patchA
hg revert -r2 fileB  // get fileB after the wrong change
hg pnew patchA2

これで、fileAがpatchAに変更され、残りはpatchA2に変更されました。

于 2011-08-18T08:39:53.920 に答える