【问题标题】:Merging some revisions but not others with Mercurial使用 Mercurial 合并一些修订,但不合并其他修订
【发布时间】:2011-08-09 23:28:17
【问题描述】:

我最近开始使用 Mercurial 跟踪我的项目的更改。在开始开发某个功能之前,我进行了几次修改。现在,我想回到我实现该功能之前的修订版,并尝试以一种非常不同的方式实现它。但是,我想保留我在处理第一个实现时所做的一些更改,因为无论我选择哪种实现,它们都同样适用。

在我开始实施该功能之前更新回修订版的最佳方法是什么,但有选择地将默认分支中的更改合并到一个新的单独分支中?这是与 Mercurial 合并/分支的正确方法吗?如果我这样做,我以后可以“放弃”其中一个分支以支持此功能的一个特定实现吗?

【问题讨论】:

    标签: mercurial merge branch


    【解决方案1】:

    如果你有一个像 Beyond Compare 这样的外部差异程序,这很容易。

    1. 启用 extdiff 扩展并将其配置为使用您的差异程序(例如,我已设置系统以便 hg bcompare 将运行 Beyond Compare)
    2. 将您的存储库的工作目录更新为您要在其中启动新分支的修订版。
    3. 使用 Mercurial 运行您的差异程序,针对实验性更改的头部。
    4. Cherry 从实验代码中选择您想要的更改,可以是整个文件,也可以是文件中较小的差异。
    5. 当您退出差异程序时,您的工作目录将包含您选择的更改。
    6. 启动一个新分支 (hg branch) 或设置一个书签 (hg bookmark) 来跟踪这组新的更改。有关差异的说明,请参阅 http://stevelosh.com/blog/2009/08/a-guide-to-branching-in-mercurial/
    7. 提交更改,然后出发!

    当你决定你想要的实现时,你可以更新到你想要的分支的头部,并使用hg commit --close-branch将它标记为关闭,它仍然保留为头在存储库中。如果您想将其作为头删除,请更新到您确实想要的分支的头并使用hg merge --tool internal:local <rev-of-the-other-head> 合并它,但保留所有想要的更改。

    【讨论】:

    • 谢谢!但是,如果我遵循该程序,这些更改似乎不会突然出现吗?也就是说,如果我按照这些步骤操作,查看修订历史的其他人如何知道我从哪些中间修订中提取了更改?
    • 没错;在这种情况下,我会在提交消息中对此进行注释 - 类似于“这些是从 revs X 到 Y 的精心挑选的更改,因此我可以尝试不同的实现”。如果您想要的更改被隔离到特定的变更集或集合,您可以使用hg backout 删除您不想要的变更集。或者,如果它们被隔离到特定文件,hg revert 会让您选择要返回到原始版本的文件并继续处理您所做的更改。
    • 我尝试了您的原始程序,它确实有效,但对我来说感觉很乱。我认为如果我更好地理解它,使用backout 可能会起作用。我对混乱的抱怨是因为我的修订图没有显示实际合并到新分支中的中间更改,这就是正在发生的事情。 (有些变更集在我想选择合并的地方发生了变化,但无论如何我应该能够处理。)有没有办法实现这一点,所以修订历史更准确地反映了我对存储库所做的事情?
    • @Henry:我的程序的逆转会起作用吗?更新到实验分支的尖端,针对该工作的开始做一个差异,然后挑选你想要保留的更改,然后提交一条消息“删除不需要的实现部分 #1;从实现 #2 开始”。
    【解决方案2】:

    我知道这个问题有点老了,但我今天在做一个项目时遇到了类似的问题。我花了几天时间在一个死胡同中尝试了默认分支上的一个功能。这是我用来让我的代码库恢复良好状态的过程。

    1. 我已通过 hg 更新 -R 0
    2. 我为该功能创建了一个新分支(hg 分支 NEWFEATUREhg 提交
    3. 我开始采樱桃好了 通过 tranplant 从另一个分支提交(hg 移植 -b 默认 revNumberToPick)

    Transplant 现在随 mercurial 一起发货,只需要您启用它即可。该文档位于Mercurial wiki。希望这会有所帮助!

    【讨论】:

    • 谢谢!有时间我会试试这个。我最近一直在为我的项目使用 Git,但我仍然有这个 Mercurial 存储库。信不信由你,这个特殊的问题(以及我在 DVCS 方面的其他缺点)让我非常沮丧,以至于放弃了这个项目!
    • 我在许多项目中受到的挫败远远少于此
    猜你喜欢
    • 1970-01-01
    • 2017-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多