Mercurial:如何在不进行变更集的情况下制作工作目录的快照?

时间:2014-12-16 10:07:59

标签: mercurial shelving

在处理新功能时,我到达的地方大致有效,但仍未达到我想要创建变更集的程度。然而,我会创建一个“还原点”或“snapsnot”,以便我可以回到我的代码库的这个大致工作版本。在TFS我会创建一个搁架集。

在mercurial中,搁置集表现不同:只要我将文件移动到一个架子中,该文件就会恢复到最后一个变更集的状态。因此,出于创建快照和继续工作的目的,此行为使得搁置不是解决方案。

How can I snapshot my work and continue with the files as they are?

我知道这里有很多关于搁置货币的问题,但我找不到这个问题的答案。

评论@Mathiasdm和@Gill Bates的有用答案

现在我使用commit --amend,也可以在TortoisHG中使用:提交按钮可以转换为修改按钮。

Ammend将更改添加到先前的提交,而不是创建新的更改集。所以

  • 首先我使用粗略版本创建提交然后
  • 通过修改来改进它。

“hg shelve&& hg unshelve --keep”和mq扩展是不错的选择。

2 个答案:

答案 0 :(得分:4)

一个特别适用于此的命令是:

hg commit --amend

它允许您创建提交并不断改进(修改它)。每次执行&#h; hg commit --amend'时,工作目录中的所有其他更改都会添加到其中。

我知道这听起来并不像“搁置”,但听起来你所需要的实际上并不是真正的搁置。

答案 1 :(得分:3)

实现目标有很多方法:

搁置

您可以使用此命令:

hg shelve && hg unshelve --keep

它将创建一个搁架,然后将其搁置到工作空间,将搁架搁置在货架存放处。

MQ扩展

还有MQ extension可让您将提交作为补丁进行管理。您可以使用以下命令创建快照:

hg qnew my_snapshot_name

然后,您将能够刷新,取消应用,重新应用,更改顺序,转换为常规变更集并执行其他有用的操作,请查看the link以获取信息。

修补程序

您只需保存补丁:

hg diff > tmp.diff

然后将其应用于:

hg import tmp.diff

或者用:

patch -p1 < tmp.diff

或者您可以在MQ中导入:

hg qimport tmp.diff

功能分支

您可以调整VCS工作流程并使用所谓的“功能分支”来存储功能特定的进度,而不是用它污染主分支:

hg branch feature/my_stufff
... work work work ...
hg commit -m 'some progress'
... polish debug finalize ...
hg commit -m 'now it really works'

然后,您需要将更改传播到主分支。 如果您希望保持历史线性,则可以使用rebase extension执行此操作:

hg rebase -s feature/my_stuff -d default --collapse

它将占用整个功能分支,置于默认分支的顶部,并将功能分支的所有更改集折叠为一个变更集。当然,你可以在没有崩溃的情况下进行重组。

或者您可以将功能分支合并到默认分支:

hg update default && hg merge feature/my_stuff

这将保持非线性。