【问题标题】:How do you "undo" a local commit to the wrong branch您如何“撤消”对错误分支的本地提交
【发布时间】:2016-11-22 12:16:13
【问题描述】:

我在 Visual Studio 中从主分支进行了一些代码更改,并尝试在 TortoiseHG 的新分支中提交更改,但显然我不小心将更正提交到了主分支。我没有将更改推送到远程存储库,但如果我尝试对更改执行“退出”,我会收到错误消息“无法在不同的分支上退出更改”,即使它明确指出更改已提交到主分支。

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

【问题讨论】:

标签: mercurial tortoisehg


【解决方案1】:

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

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

 hg rebase -s FIRST_CHANGESET_TO_MOVE -d DESTINATION

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

【讨论】:

    【解决方案2】:

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

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

    存储库 -> 回滚/撤消

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

    如果由于某种原因回滚/撤消不起作用:

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

    【讨论】:

    • 我在提交到错误的分支后做了几次拉动,这就是为什么确认消息说“回滚到修订 xxxx(撤消拉动)”?我可以一直撤消直到文本显示“回滚到修订 xxxx(撤消提交)”之类的内容吗?我还想绝对确定我只是在更新我的本地工作目录,是这种情况吗?
    • 是 && 否 - 多次回滚对我来说永远不起作用 && 查看阶段列 - 如果它没有说公开,那么提交是可以安全修改的。
    • 恢复所有文件很棒 - 在这种情况下,您正在“恢复”到比您更新到的新版本。请注意,每次更改都必须这样做,否则您可能会将所有更改合并为一个大更改。
    【解决方案3】:

    我能够通过备份提交中的所有文件,在 TortoiseHG 中添加扩展名“eol”和“mq”,右键单击草稿分支并选择“修改历史记录 -> 剥离.. ."。之后我只是再次添加了备份的文件并将它们提交到正确的分支。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-26
      • 2010-10-29
      • 1970-01-01
      相关资源
      最近更新 更多