记住未提交的更改

问题描述 投票:1回答:3

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

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

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

虽然你当然可以使用mercurial队列,但是恕我直言更容易和更好的方法:将你的默认阶段更改为机密并使用正常提交等提交。阶段秘密中的提交是可变的,并且不会通过作用于repo的推拉命令来暴露。

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

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

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

查看需要introductionhg phaseschangeset evolutionevolve extension


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


-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选项并手动完成补丁。

© www.soinside.com 2019 - 2024. All rights reserved.