【问题标题】:Rolling back changes in mercurial best pracitice回滚 mercurial 最佳实践中的更改
【发布时间】:2015-01-10 05:41:58
【问题描述】:

我正在尝试撤消尚未推送的已提交更改。

我使用 TortisHG。我不知道如何启用条形扩展。

我怀疑那里有一个解决方案might be best practice,但我无法理解合并部分。而且我认为它不能解决解决本地提交但未推送的变更集的问题。

我发现 Tortis 中的回滚不会减少芥末。

最后 - 使用 GIT 会更容易吗?

【问题讨论】:

    标签: mercurial rollback


    【解决方案1】:

    只需将工作区更新到不需要的提交更改之前的位置。

    然后只需在该更改之后移植后续位,您需要从该位置及时向前工作

    然后你可以使用 strip 来整理

    【讨论】:

      【解决方案2】:

      几天前问了几乎完全相同的问题 - Discarding more than one commit in TortoiseHg。当不需要的变更集位于分支的头部时,它可以工作。为了省去您查找的麻烦,我在下面复制了我的答案。如果您在不需要的变更集之上提交了所需的变更集,则使用 rebase 会有一个稍微复杂的答案,但不清楚这是否是一个问题:

      在最近的一个 mercurial(我认为是 v2.8 之后)中,您可以使变更集过时,从而将它们从大多数视图中隐藏起来,但如果您发现需要它们,它们仍然存在。这是做你想做的事情的推荐方法。

      假设最近的变更集是 132,最新的好变更是 130。只需像这样废弃变更集 131 和 132:

      hg prune -r 131::132
      

      再简单不过了(只要确保当前父级不是不需要的变更集之一)。 [而且我不明白 git 怎么能让它变得更简单。]

      如果您想查看过时变更集的内容,只需将 --hidden 添加到普通命令行,例如:

      hg log -r 120::132 --hidden
      

      注意。 Tortoise 具有查看过时变更集的功能,但我认为它还没有能力使它们过时。

      【讨论】:

      • 嗨 - 我想这就是我想要的!我会测试一下。干杯。
      【解决方案3】:

      一种选择是修改旧的变更集。这特别有用,因为您想要撤消的变更集是提示,但包含一些您想要恢复的变更和一些您想要保留的变更。只需还原要撤消的文件并运行hg commit --amend。这会将任何工作目录更改应用于先前的提交。这将产生的效果是取消您想要摆脱的更改。

      【讨论】:

      • 这似乎也是一个不错的选择!我只是将 UG Tortis 升级到最新版本作为第一步。即使我在控制台中做所有事情 - 我使用 Trotis 来克隆 repo。
      【解决方案4】:

      您在“最佳实践”中提到的“在进行合并时保留“我的”或“他们的”文件,更多的是关于丢弃来自其中一个分支的更改。我相信您所需要的只是“条形”扩展。

      您还可以通过将您的变更集临时导入补丁队列并只挑选您需要的变更来使用 MQ:

      1. 右键单击要丢弃的最低变更集,“修改历史记录”->“导入到 MQ”
      2. 打开“补丁队列”对话框并按“取消应用所有补丁”
      3. 通过拖放按您需要的顺序重新排列补丁
      4. 仅应用您需要的补丁
      5. 通过右键单击变更集“修改历史”->“完成补丁”来完成它们

      关于启用“strip”扩展。如果您启用了 MQ 扩展,“条带”会自动激活,即使它一直显示为“未选中”和“禁用”。禁用 MQ(并重新启动 TortoiseHG)将允许您显式启用/禁用“strip”。

      PS:在 Win32 机器上检查,TortoiseHG 3.2.3

      PPS:对于“GUIsh”解决问题的方式感到抱歉 :-)

      更新: 我试图用旧版本的 Mercurial 重现上述命令行版本。 首先,我们创建一个 repo 并用变更集填充它:

      C:\temp>mkdir testhg
      
      C:\temp>cd testhg
      
      C:\temp\testhg>hg init
      
      C:\temp\testhg>hg --version
      Mercurial Distributed SCM (version 2.2.1)
      (see http://mercurial.selenic.com for more information)
      
      Copyright (C) 2005-2012 Matt Mackall and others
      This is free software; see the source for copying conditions. There is NO
      warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE
      
      C:\temp\testhg>echo test1 > file.txt
      
      C:\temp\testhg>hg addremove
      adding file.txt
      
      C:\temp\testhg>hg ci -m "test 1"
      
      C:\temp\testhg>echo test2 >> file.txt
      
      C:\temp\testhg>hg ci -m "test 2"
      
      C:\temp\testhg>echo test3 >> file.txt
      
      C:\temp\testhg>hg ci -m "test 3"
      

      这些是我们的变更集:

      C:\temp\testhg>hg log
      2[tip]   201b257237ac   2015-01-13 17:59 +0200   Username
        test 3
      
      1   2054f00740b6   2015-01-13 17:58 +0200   Username
        test 2
      
      0   160251440fb0   2015-01-13 17:58 +0200   Username
        test 1
      

      将最后两个更改移动到补丁队列中:

      C:\temp\testhg>hg qimport -r 1 -r 2
      
      C:\temp\testhg>hg qseries
      1.diff
      2.diff
      

      删除中间的更改(补丁文件本身仍然保存在补丁目录中):

      C:\temp\testhg>hg qremove -k  1.diff
      

      推迟我们想要保留在历史记录中的更改并完成它:

      C:\temp\testhg>hg qpush
      applying 2.diff
      patching file file.txt
      Hunk #1 succeeded at 2 with fuzz 2 (offset -1 lines).
      now at: 2.diff
      
      C:\temp\testhg>hg log
      1[2.diff,qbase,qtip,tip]   9d0771cf5145   2015-01-13 17:59 +0200   Username
        test 3
      
      0[qparent]   160251440fb0   2015-01-13 17:58 +0200   Username
        test 1
      
      C:\temp\testhg>type file.txt
      test1
      test3
      
      C:\temp\testhg>hg qfinish 1
      
      C:\temp\testhg>hg log
      1[tip]   9d0771cf5145   2015-01-13 17:59 +0200   Username
        test 3
      
      0   160251440fb0   2015-01-13 17:58 +0200   Username
        test 1
      

      【讨论】:

      • 我应该放置一个子句“0”:在开始使用它之前克隆/备份你的 repo。
      • 好的,我有 Tortis 1.112。运行 Mercurial 2.9.2。所以我会更新。你在 Tortis 中启用了 Mq 扩展吗?如果可能的话,我也想知道如何在命令行上执行此操作。泰为你的帮助。理论。 cd 到某个目录(Tortis?)或 Mercurial 所在的任何地方并运行命令?额外的问题 - 我刚刚发现这个 - 不打算使用它,但是 - 我 cd 进入的(dir)会成为我的网络应用程序中的 hg 文件夹吗? mercurial.selenic.com/wiki/EvolveExtension
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-26
      • 1970-01-01
      • 2020-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多