如果我有一堆未提交的更改,并且想在处理其他事情时将其放在一边,然后稍后(例如几天后)返回并继续工作。完成此任务最简单的工作流程是什么? (到目前为止我只体验过 Mercurial 的基本功能)。我通常的方法是使用克隆创建一个新分支,但可能有更好的方法。
你有几个选择:
-
Shelve https://www.mercurial-scm.org/wiki/ShelveExtension这几项。这将保存更改并将其从工作目录中删除,以便分支可以继续。它不会创建变更集。
hg shelve --all --name "UnfinishedChanges"
hg unshelve --name "UnfinishedChanges"
更新/编辑:可能需要使用较新版本的mercurial
hg shelve -n "UnfinishedChanges"
hg unshelve "UnfinishedChanges"
您仍然可以使用--name
作为替代-n
,但mercurial似乎不喜欢--name
不再了。此外,--all
不再需要,并且 Mercurial 实际上会对此感到抓狂。
-
补丁队列 https://www.mercurial-scm.org/wiki/MqExtension/使用的物品mq
。这在某些方面与搁置并没有太大的不同,但行为有所不同。最终结果是相同的,更改被删除,并且可以选择稍后重新应用。当推送时,补丁是逻辑变更集,当弹出时,它们保存在其他地方并且不是变更集历史的一部分。
hg qnew "UnfinishedWork"
hg qrefresh
hg qpop
hg qpush "UnfinishedWork"
-
在本地提交它们,更新到以前的更改集并继续工作并使用匿名分支(或多头)。如果您随后想要进行更改,则可以合并头。如果您不想进行更改,您可以strip https://www.mercurial-scm.org/wiki/StripExtension变更集。
hg commit -m"Commiting unfinished work in-line."
hg update -r<previous revision>
hg strip -r<revision of temporary commit>
-
将它们提交到指定的分支。然后,工作流程将变得与选项 3 相同 - 准备好后合并或剥离。
hg branch "NewBranch"
hg commit -m"Commiting unfinished work to temporary named branch."
hg update <previous branch name>
就我个人而言,我使用选项 3 或 4,因为我不介意剥离更改集或签入部分代码(只要最终不会推送)。这可以与新的结合使用Phase https://www.mercurial-scm.org/wiki/Phases如果需要的话,可以对其他用户隐藏本地变更集。
我也用rebase
命令来移动更改集以避免合并,其中合并不会向代码历史记录添加任何内容。合并我倾向于保存重要分支(例如发布分支)之间的活动,或来自寿命较长的功能分支的活动。还有histedit
我用来压缩变更集的命令,其中它们的“闲聊”会降低价值。
补丁队列也是执行此操作的常见机制,但它们具有堆栈语义。您可以推送和弹出补丁,但是堆栈中另一个补丁“下方”的补丁需要同时推送其顶部的补丁。
Warning与所有这些选项一样,如果文件自您搁置/排队/分支的临时更改以来有更多更改,则在取消搁置/推送/合并时将需要合并解析。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)