4

实际上,我必须在单独的分支中执行某些代码时,我已经向 master 提交了一些代码。更糟糕的是,我推送了更改(更准确地说,做了 a svn dcommit,但这不应该有任何区别)并且有几个人在我之后将他们的更改推送给了主人。这是master现在的样子:

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 做到这一点

我建议你使用cherry-picks:在这种情况下 svn:mergeinfo 将被正确翻译。

  1. 我想你在 master 上并且没有本地更改。将master重置为A(Local->Reset,找到A)。
  2. 现在您需要重新应用 E。打开 Log,找到 E -> 右键单击​​ -> cherry-pick(在 Cherry-pick & commit 对话框中)。
  3. 您现在可以推送 master 来替换您的中继:Remote->“Push advanced”,选中“Force”复选框。
  4. 现在主干是正确的。创建一个分支“newbranch”并切换到它。
  5. 再次打开 Log,找到并选择提交 B、C、D -> 右键单击​​ -> 樱桃挑选(Cherry-pick & commit again)。
  6. 按推。在可能出现的对话框中选择“Push as new”。
于 2012-06-22T10:56:29.413 回答