将推送的git提交移动到其他分支,在其他人推送其更改后

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

有没有办法做到这一点?
1个回答

3

SVN永远不会忘记。您只能将新历史与现有“trunk”替换。我可以告诉您如何使用SmartGit进行操作。

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

  1. 假设您在主分支上没有本地更改。将主分支重置为A(Local->Reset,找到A)。
  2. 现在您需要重新应用E。打开日志,找到E->右键单击->cherry-pick(在Cherry-pick&commit对话框中)。
  3. 现在您可以将主分支推送以替换您的主干:Remote-"Push advanced",选择“Force”复选框。
  4. 现在主干是正确的。创建一个名为“newbranch”的分支并切换到它。
  5. 再次打开日志,查找并选择提交B,C,D->右键单击->cherry-pick(再次进行Cherry-pick&commit)。
  6. 按下Push。在可能出现的对话框中选择“Push as new”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接