20

Mercurialに関連:1つのリポジトリ内のブランチ間で1つのファイルをマージします。そのファイルは、バックアウトされるリビジョンの多くの参加者の1つでしたが、1つのファイルに対してバックアウト操作を実行しようとしています。

HGは、それ自体がチェンジセット指向のツールであるため、ファイルを操作する必要はありません。

最も近いのは、hg exportを使用してdiffを作成し、diffを手動で編集してから、hgimportを使用してファイルに逆の順序でパッチを適用することでした。

..しかし、 http: //hgbook.red-bean.com/read/finding-and-fixing-mistakes.htmlが--reverseオプションがあると主張しているこの厄介な状況に遭遇しましhg patch た。

したがって、私が考えることができる最も近いことは、上記のように手動で編集されたパッチを生成し、次にバニラパッチ-Rを使用してリバースパッチを適用することです。

このhg backoutコマンドはここでは便利なように見えますが、実際には赤いニシンです。

より良い方法があるGOTがありますね?

4

3 に答える 3

6

ヒント リビジョンの新しいクローンを使用します。

hg backout --merge -r revision_where_the_change_happened

逆の変更を作業コピーにマージします。

問題のファイルを通常の作業コピーにコピーしてコミットします

hg commit -m "Reversed the changes to file.h made in revision bla"

上記で作成したクローンを破棄します。

revision_where_the_change_happenedこのようにして、mercurial はとこのコミットの間に関係があることを知りません。Mercurial にこれを記憶させたい場合は、代わりに

hg revert {all files except the one in question}

バックアウトコミットを作業コピーにマージした後、コミットする前。2 番目の方法では、バックアウト コミットを維持したいので、クローンで作業する必要はありません。

どちらの方法を使用するかの選択は、特定のファイルの変更が変更セットのどの部分を占めるかによって決まると思います。

于 2009-07-06T10:24:43.410 に答える
4

元に戻すコマンドを使用します。

hg revert -r1 file

これにより、ファイルの内容がリビジョン 1 のバージョンに戻されます。その後、さらに編集して、通常どおりコミットできます。

于 2009-07-10T10:04:33.700 に答える