4

実際には別のブランチで実行する必要があるときに、いくつかのコードをマスターにコミットしました。さらに悪いことに、私は変更をプッシュしました (より正確には、 を実行しましたsvn dcommitが、違いはありません)。私の後に変更をマスターにプッシュした人が何人かいます。これは、マスターが現在どのように見えるかです。

A (theirs) - B (mine) - C (mine) - D (mine) - E (theirs)
                                              ↑
                                              master

コミットを別のブランチに移動して、次のようにしたいと考えています。

A (theirs) - E (theirs)
|            ↑
|            master
|
+ - B (mine) - C (mine) - D (mine)
                          ↑
                          newbranch

これを行う方法はありますか?

4

1 に答える 1

3

SVN は決して忘れません。既存の「トランク」のみを新しい履歴に置き換えることができます。SmartGitを使用してそれを行う方法を教えてください

チェリーピックを使用することをお勧めします: この場合、svn:mergeinfo は正しく翻訳されます。

  1. あなたはマスターにいて、ローカルの変更はないと思います。マスターを A にリセットします (Local->Reset、A を見つけます)。
  2. 次に、E を再適用する必要があります。ログを開き、E を見つけます -> 右クリック -> cherry-pick (ダイアログで Cherry-pick & commit)。
  3. master をプッシュしてトランクを置き換えることができます: Remote->"Push advanced", "Force" チェックボックスをチェックしてください。
  4. これでトランクは正しいです。ブランチ「newbranch」を作成し、それに切り替えます。
  5. ログを再度開き、コミット B、C、D を見つけて選択 -> 右クリック -> チェリー ピック (チェリー ピック & 再度コミット)。
  6. プッシュを押します。表示されるダイアログで、[Push as new] を選択します。
于 2012-06-22T10:56:29.413 に答える