0

開発者がさまざまな名前の付いたブランチにコードをコミットしているときにエラーが発生したリポジトリがあります。本質的に、起こったことはこれでした:

A - B - C
 \
  W - X - D - E - Y - Z

ABCDEはすべて(想定される)メインブランチの一部であり、WXYZは新しい名前付きブランチでコミットされます。開発者は、「D」と「E」を変更する前に「C」に更新できず、それらの上に「Y」と「Z」をコミットしました。

WXYZを含めずに、「D」と「E」をメインブランチに移動する必要があります。

A - B - C - D - E
 \
  W - X - Y - Z

私は全体的にHgにそれほど精通していませんが、学んでいて、進んでいます。私はリベースを見てきました、そしてそれは私が行く必要があるところに私を連れて来ないようです。開発者に変更を取り消して、適切な場所に再適用することもできますが、それは正確には「正しく」ないようです。

この問題をどのように解決しますか?

ありがとう!

4

2 に答える 2

2

最も安全な方法は、あるブランチから別のブランチにリビジョンをコピーしてから、次のコマンドを使用してコミットしたブランチからそれらをバックアウトすることです(これらのチェンジセットの文字をリビジョン番号に置き換えます)。

> hg up C
> hg graft D:E
> hg up Z
> hg backout D:E
> hg commit -m "Backout changes D to E"

これにより、デフォルトのブランチはそのまま残りますが、1回のコミットでバックアウトされた名前付きブランチにいくつかの不正なリビジョンが残ります。

で履歴を編集する場合hg rebaseは、次のコマンドを使用して編集できます。

> hg rebase -r Y:Z -d X
> hg rebase -r D:E -d C -D

これを行う前に、おそらく変更セットのフェーズをドラフトに変更する必要があります(それを行いますhg phase -d rev

リベースルートを使用する場合は、リポジトリのすべてのクローンが削除され、再クローン化されて、削除された履歴が戻らないようにする必要があります。あなたが大規模なチームを持っているなら、それは危険かもしれません。それが私が最初のオプションを提案した理由です。

于 2012-08-24T19:51:10.187 に答える
1

Steve Kayeによって投稿された優れたバックアウトのアイデアに加えて、 MercurialQueues拡張機能を使用してパッチキューを試すことをお勧めします。D、E、Y、およびZをパッチキューにインポートする場合、パッチDおよびEをBの上に適用してから、YおよびZをXの上に適用できます。

ABCDブランチへの変更がWXYZとは別のものである場合、これは問題なく成功するはずです。ただし、ABCDとWXYZの変更が類似している場合(つまり、ファイル内の同じ行に触れる、ファイルの名前を変更するなど)、拒否されたファイルがいくつか表示される可能性があります。

于 2012-08-27T00:28:49.580 に答える