记住未提交的更改

时间:2017-09-24 21:10:48

标签: mercurial

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

所以,更确切地说,我需要像堆栈这样的东西:

  1. 处理代码。请记住堆栈上的更改C
  2. hg update --clean
  3. 进行更改C2。承诺吧。
  4. 从堆栈弹出变更集C并对其进行处理。但是,现在repositorium包含已提交的更改C2和未提交的C。这可能会导致我需要合并,但我希望从repositorium的角度看这个合并是不可见的。

3 个答案:

答案 0 :(得分:3)

虽然您当然可以使用mercurial队列,但是恕我直言的方法更简单,更好:将默认阶段更改为机密并使用正常提交等提交。阶段保密的提交是可变的,不会通过作用于回购的推拉命令来公开。

此过程的优势在于您无需更改工作流程 - 无论您是使用要共享的提交(阶段性草稿还是公共),还是仍然认为它们正在进行中并且仅在本地保留它们

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

使用mercurial队列的一大优势是你可以充分利用inbuild合并功能 - 因此如果底层代码发生变化,重新定义新的变更集比使用队列和hg搁置更容易和自然。 / p>

查看需要introductionhg phaseschangeset evolutionevolve 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 mqhg 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选项并手动完成补丁。