场景:在您最后一次提交之后,您决定对代码库进行一些广泛的重构。一段时间后,您意识到它花费的时间比预期的要长,您真的宁愿将重构推迟一次,并处理更紧迫的任务。但是您不想丢失迄今为止所做的所有重构工作。
那么,有没有办法“归档”或“分支”工作副本(本质上,将它放在一边,但将其保存在存储库中以供以后访问),然后恢复到最后一个好的提交并从那里恢复,而不用担心创建多个头还是将两者混淆?
场景:在您最后一次提交之后,您决定对代码库进行一些广泛的重构。一段时间后,您意识到它花费的时间比预期的要长,您真的宁愿将重构推迟一次,并处理更紧迫的任务。但是您不想丢失迄今为止所做的所有重构工作。
那么,有没有办法“归档”或“分支”工作副本(本质上,将它放在一边,但将其保存在存储库中以供以后访问),然后恢复到最后一个好的提交并从那里恢复,而不用担心创建多个头还是将两者混淆?
不要担心“两个头的恐惧”。两头是很正常的状态。它被称为匿名分支,这是人们在 Mercurial 中创建临时分支的方式之一。
只需提交,然后更新到tip-1,您就可以开始了:
hg commit -m "working on XXX"
hg update -r "tip-1"
你走了。如果你想在那个头上放一个书签(不如标签永久),你可以,但不必担心。
你总是可以推一个头而不用推另一个头hg push -r HEAD
,甚至可以在哪里hg push -r .
不要害怕头脑——它们是基于 DAG 的 VCS 强大的原因。
您可以使用 mq、attic 或 shelve 扩展来做到这一点。
由于 mercurial 使用硬链接,因此您可以将两个存储库都保留在本地计算机上,并且使用最少的空间。命令:
$hg tag 重构
$cd ..
$hg clone 重构稳定
$cd 稳定
$hg revert -r REVISION_NUMBER
额外帮助:
http ://hgbook.red-bean.com/
http://kiln.stackexchange.com/
你可以用简单的方法做到这一点:
$ hg diff -g > tmp
$ hg revert --all
您的更改现在将存储在tmp
. 您可以使用
$ hg patch --no-commit tmp
你会回到原来的地方。有像搁置这样的扩展可以为您自动执行上述操作。
在 git 中,你会做一个“藏匿”。根据This hg 有“搁置”,但它需要扩展。