我有一个mercurial存储库my_project
,托管在bitbucket。今天我做了一些更改并将它们提交到我的本地存储库,但是还没有推出它们。
然后我主要填充并肥胖rm -rf my_project
(!!!!!)。
我是否有某种方法可以检索我今天所做的更改,因为我还没有把它们推出去?我知道一天的提交听起来并不多,但确实如此!
我对这个项目的所有其他克隆只是最新的推送(不包括今天的更改)。
欢呼声。
答案 0 :(得分:3)
mercurial无法救你。来自mercurial的数据存储在项目文件夹基础的隐藏目录中。在您的情况下,可能在my_project/.hg
。你的递归删除也会破坏这个文件夹。
答案 1 :(得分:1)
没有。更改仅存储在本地存储库目录(其中的.hg目录)中,直到您推送为止。它们永远不会放在其他地方(甚至不是/ tmp)。
但是,您可能无法从磁盘恢复已删除的文件;搜索指令和工具。
答案 2 :(得分:1)
我担心提交会与工作副本一起删除,文件恢复工具是恢复丢失的.hg
文件夹的唯一选择。我看到你可以从安装中恢复代码 - 太棒了!
如果你害怕再次发生这种情况,那么你可以安装一个粗略的钩子,如
[hooks]
post-commit = R=~/backup-repos/$(basename "$PWD");
(hg init "$R"; hg push -f "$R") > /dev/null 2>&1 || true
这将强制将所有提交的副本推送到~/backup-repos
下的合适仓库。 -f
标志确保即使您使用诸如rebase或mq之类的扩展来修改历史记录,也可以推送备份。它还允许将不相关的repos中的变更集推送到同一个备份仓库中 - 想象两个名为foo
的不同仓库。因此,备份存储库会在一段时间后以巨大的变更集结束,您可能希望偶尔删除它们。
我对此进行了简要测试,对于日常工作,我认为你不会注意到额外副本的开销,你可能会在以后感谢自己: - )