2017-09-24 50 views
1

我有我的回购一些未提交更改C。我想以任何方式记住这些变化,并获得干净的代码(没有这些变化),做一些改变并提交。现在,我想恢复我的更改C并继续处理它。我知道我可以用很多方式处理它,但这种方式令人ir目。如何使用mercurial做到这一点?记住未提交的更改

所以,更精确地说,我需要的东西就像一个堆栈:

  1. 上的代码工作。请记住堆栈上的更改C
  2. hg update --clean
  3. 进行更改C2。承诺。从堆栈
  4. 弹出一个变更C和工作就可以了。但是,现在repositorium包含COMMITED变化C2和未提交C。这可能是因为我需要合并,但我期望从存储的角度看这种合并是不可见的。所以,

回答

1

启用您的mercurial.ini.hgrc文件中的水银队列扩展:可以

[extensions] 
mq = 

然后,

hg qnew save  # save work in progress as a temporary commit 
hg qpop   # remove that commit 

多结交一些变化....

hg ci -m "new changes" 
hg qpush      # push the saved commit back. 
hg qfinish -a    # convert all temp commits to full commits. 

您还可以启用货架讯号分配延长锡永:

[extensions] 
shelve = 

然后,您可以:

hg shelve  # "put away" current uncommitted changes. 
*do other work* 
hg unshelve # bring the shelved changes back 

更多信息,请参见hg help mqhg help shelve

+1

我不认为我们应该鼓励更多的人学习进化。让我们将人们指向进化。 Evolve具有较少的概念开销并且更容易学习。 MQ也被上游的mercurial弃用(不推荐使用,因为没有人正在改进它,并且它将来不会获得任何新功能)。 – ngoldbaum

+0

我已经使用evolve,并喜欢它,但它仍然有它的怪癖。我认为不建议使用成熟的扩展名是值得的。然而,我认为你不喜欢你的第一句话:^) –

2

虽然你当然可以用水银队列工作,还有恕我直言一种更简单,更好的方式:改变你的默认阶段的秘密,并与正常人一样的提交者提交工作。阶段秘密提交是可变的,不会通过作用于回购的推拉命令暴露。

此过程的优点是无需更改工作流程 - 无论是使用您想要共享的提交(阶段草稿还是公开),还是仍然将它们视为正在工作并将其保留在本地只要。

此外,如果启用进化扩展,您将获得以下好处:修改提交并演进(从而重新绑定)所有依赖它的子提交变得更加容易。

使用mercurial队列的一大优点是,您可以充分利用inbuild合并功能 - 因此,如果底层代码发生变化,重新设置新的变更集比使用队列和HM搁置更容易和自然。

查看introductionhg phaseschangeset evolution需要evolve extension

+0

秘密阶段不比草稿阶段更易变,只有头部提交可以被修改(通过--amend)。在mq上也是FYI,您可以重新绑定应用的修补程序队列,它也会使用合并工具。进化仍然列为实验,因此也应该考虑。 –

+0

是的,没有。你错过的是进化扩展的实际收益:启用它,你可以修改任何提交 - 并且随后只需要“改进”现在改变的所有孩子(这是用一个命令完成的)。它具有额外的好处,即不会像mq一样丢失历史记录(只有在为修补程序队列引入新回购时,才会有这种情况) 虽然秘密和草稿都可以更改 - 草稿提交将被共享,然后可能会成为不变的。因此,对那些你不想分享的人使用阶段秘密。 – planetmaker

+0

我知道进化是什么,喜欢它。我只是说它被认为是实验性的。 –

0

我试过货架,MQ在其他的答案中描述,但说实话,我一般坚持:

hg diff > saved.patch # This assumes you've not aliased diff to a UI!!! 
hg update -C 
.. work 
hg patch -f --no-commit saved.patch # I alias this for less typing 
.. continue 

减记账参与,它从来不出错不像货架,而补丁本身是更容易携带。只需使用常识并确保补丁完全适用,或者使用--partial选项并手动完成补丁。