2

在开发一个新功能时,我到达了它大致可以工作的地步,但仍然不是我想要创建变更集的地步。然而,我会创建一个“恢复点”或“snapsnot”,这样我就可以回到我的代码库的这个大致工作版本。在 TFS 中,我会创建一个搁置集。

在 mercurial 中,搁置集的行为有所不同:一旦我将文件移动到搁架中,文件就会恢复到最后一个变更集的状态。因此,出于我创建快照并继续工作的目的,这种行为使搁置不是解决方案。

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

我知道这里有很多关于 mercurial 搁置的问题,但我无法在其中找到这个问题的答案。

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

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

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

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

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

4

2 回答 2

4

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

hg commit --amend

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

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

于 2014-12-16T10:34:49.730 回答
3

实现目标的方法有很多:

搁置

你可以使用这个命令:

hg shelve && hg unshelve --keep

它将创建一个搁置,然后将其取消搁置到工作区,将搁置保持在搁置存储中。

MQ 扩展

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

hg qnew my_snapshot_name

然后您将能够刷新它、取消应用、重新应用、更改订单、转换为常规变更集并做其他有用的事情,请查看链接以获取信息。

修补

您可以只保存一个补丁:

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 扩展来做到这一点:

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

它将占用整个功能分支,放在默认分支的顶部,并将功能分支的所有更改集折叠到一个更改集中。当然,您可以在不崩溃的情况下重新设置基准。

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

hg update default && hg merge feature/my_stuff

这将保持非线性。

于 2014-12-16T10:11:42.957 回答