1

下の写真では、Mozilla の mercurial リポジトリ グラフが、ありえないと思っていた状況で見つかりました。1 つがマージである同じ親を持つ 2 つのコミットがあります。私はこれをやりたかったのですが、答えが見つかりません。

@ merge pull request from foo polish text
|\
| o bug 1 - add text ...
|/
o merge pull request from bar bug 2

彼らはどのようにしてこれを実現させたのですか?通常、そのアドオンの変更をヘッドにプルすると、マージしようとすると「マージするものは何もありません」となります。

4

1 に答える 1

4

これを実現する方法の 1 つは、Mercurials の組み込みの「デバッグ」コマンドを使用することです。これらは事実上、Mercurial をデバッグしている場合を除き、使用する必要のないコマンドです。それらを使用すると、理論的にはリポジトリが破壊される可能性があるため、本当に必要な場合はクローンで作業してください。

$ hg help --debug
...
 debugsetparents
           manually set the parents of the current working directory

このコマンドが行うことは、ご覧のとおり、作業ディレクトリの親を手動で設定できるようにすることです。これを使用して、マージを偽造できます。

したがって、この知識とある程度の注意があれば、次のことができます。

$ hg log --graph
  @  1[tip]  Change by A.N.Other
  |
  o  0  Local Change
$ hg debugsetparents 0 1
$ hg log --graph
  @  1[tip]  Change by A.N.Other
  |
  @  0  Local Change
$ hg commit -m "Merged"
$ hg log --graph
  @  2[tip] Merged
  |\
  | o 1  Change by A.N.Other
  |/
  o 0  Local Change

これは私が通常アドバイスすることではありませんが、「別のブランチ」からいくつかの変更を取得していることを示すことができます。そのブランチが実際に変更の先端にある場合、それが目的だと思います。

また、以下の shambulator のコメントに注意してください - これに の変更を含めるには、1を実行するときに作業ディレクトリとしてそれを持っている必要がありますdebugsetparents。もちろん、あなたの計画がそれらの変更を破棄することでない限り、その場合はupdate、 changesetを変更してから0、マージを偽造する必要があります。

于 2013-04-16T10:02:32.913 に答える