你如何 "undo" 本地提交到错误的分支

How do you "undo" a local commit to the wrong branch

我在主分支 Visual Studio 中做了一些代码更改,并试图在 TortoiseHG 的新分支中提交更改,但显然我不小心将更正提交到主分支。我没有将更改推送到远程存储库,但如果我尝试对更改执行 "Backout",我会收到错误消息 "Cannot backout change on a different branch",即使它清楚地表明更改已提交到主存储库分支.

有谁知道为什么我会收到此错误消息以及如何将更改移至正确的分支?

首先,您不想回退,因为那是为了撤消推送/发布的更改。

有多种方法可以解决此问题:

存储库 -> 回滚/撤消

这将撤消您上次的提交,并让您直接使用未提交的更改进行工作。然后您可以重新提交确保 select 新分支名称。

如果由于某种原因 Rollback/Undo 不起作用:

  1. 更新到提交的父项。
  2. 右键单击提交 -> 还原所有文件
  3. 再次提交更改 - 确保 select 新分支名称。
  4. 右键单击要删除的上一个提交 -> 修改历史记录 -> 删除(需要在文件 -> 设置 -> 扩展中启用删除扩展)

只要您的更改尚未推送到其他任何地方,就有两种选择。

a) 使用 hg rebase 将一个变更集及其所有后代移动到另一个变更集之上:

 hg rebase -s FIRST_CHANGESET_TO_MOVE -d DESTINATION

b) 不太推荐的方法是使用 hg rollback,只有当您想撤消一次提交并且此后没有提取或提交任何内容时才有效。但即使在那些情况下,hg rebase 似乎更容易使用。

我能够通过备份提交中的所有文件,在 TortoiseHG 中添加扩展名 "eol" 和 "mq",右键单击草稿分支并选择 "Modify History -> Strip..."。之后我简单地再次添加备份文件并将它们提交到正确的分支。

由于我是 TortoiseHG 的新手,我必须建议其他人谨慎使用。