我的回购邮件中有一些未提交的更改C
。我想记住任何方式的更改并获得干净的代码(没有更改),做一点改变并提交它。现在,我想恢复我的更改C
并继续努力。我知道我可以通过很多方式处理它,但这种方式令人恼火。如何使用mercurial?
所以,更确切地说,我需要像堆栈这样的东西:
C
。hg update --clean
C2
。承诺吧。C
并对其进行处理。但是,现在repositorium包含已提交的更改C2
和未提交的C
。这可能会导致我需要合并,但我希望从repositorium的角度看这个合并是不可见的。答案 0 :(得分:3)
虽然您当然可以使用mercurial队列,但是恕我直言的方法更简单,更好:将默认阶段更改为机密并使用正常提交等提交。阶段保密的提交是可变的,不会通过作用于回购的推拉命令来公开。
此过程的优势在于您无需更改工作流程 - 无论您是使用要共享的提交(阶段性草稿还是公共),还是仍然认为它们正在进行中并且仅在本地保留它们
此外,如果您启用了evolve扩展,您将获得以下好处:修改提交并进化(从而重新定义)依赖于它的所有子提交变得更加容易。
使用mercurial队列的一大优势是你可以充分利用inbuild合并功能 - 因此如果底层代码发生变化,重新定义新的变更集比使用队列和hg搁置更容易和自然。 / p>
查看需要introduction的hg phases至changeset evolution和evolve extension。
答案 1 :(得分:0)
在mercurial.ini
或.hgrc
文件中启用Mercurial Queues扩展程序:
[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 mq
和hg help shelve
。
答案 2 :(得分:-1)
我已经尝试过搁置,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
选项并手动完成补丁。