在Mercurial中提交和回滚后恢复丢失的文件。 (相当于git reflog?)

时间:2011-09-11 07:32:12

标签: mercurial

上班的工作。当我不在回购的尖端时回滚了。丢失的文件。寻找相当于保存我的工作的git reflog。

长: 所以我完成了工作,然后提交。

$ hg commit -A
[...]
adding media/js/fbfriends.js
removing media/js/streams.js
adding media/js/templetizer.js
[...]
$ hg log
$ hg log
changeset:   10:ce3ad416d9a5
tag:         tip
user:        Mihai
date:        Sat Sep 10 22:34:35 2011 -0700
summary:     Save all.

changeset:   9:ceacb7b2192a
user:        Mihai
date:        Sat Sep 10 22:25:34 2011 -0700
summary:     Mootools update.
[...]

有些浏览:

$ hg checkout 8

好。然后我想改变修订版10.愚蠢的是,我这样做:

$ hg rollback
rolling back to revision 9 (undo commit)
$ hg status
[...]
M media/js/mootools.js
R media/js/streams.js
! media/js/fbfriends.js
! media/js/templetizer.js
[...]

WTF?我的两个文件在哪里????

$ hg log
changeset:   9:ceacb7b2192a
tag:         tip
user:        Mihai
date:        Sat Sep 10 22:25:34 2011 -0700
summary:     Mootools update.
[...]

好的,我会找出.orig文件:

$ hg revert --all
[...]
undeleting media/js/streams.js
forgetting media/js/templetizer.js
reverting media/js/mootools.js
[...] // media/js/fbfriends.js doesn't even show up
$ hg status
? media/js/mootools.js.orig
$ hg history
changeset:   9:ceacb7b2192a
tag:         tip
user:        Mihai
date:        Sat Sep 10 22:25:34 2011 -0700
summary:     Mootools update.

NOOOOOO!当我做回滚的时候,我已经因为提交8而被皇室震惊了。 恢复尝试失败:

$ hg checkout 10
8 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ find -name temp
$ hg checkout 9
30 files updated, 0 files merged, 63 files removed, 0 files unresolved
$ find -name temp
$ hg checkout ce3ad416d9a5
abort: unknown revision 'ce3ad416d9a5'!
$ hg checkout ceacb7b2192a
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ find -name temp
$

但是,但是......我把它推进去了!它应该仍然在.hg的某个地方?救命? git refloggit checkout blah在几个实例中保存了我,但是有没有任何类似的内容?

编辑:总结清楚。 EDIT2:更好的头衔。

1 个答案:

答案 0 :(得分:11)

抱歉,他们走了。

rollback命令的帮助摘要是:

roll back the last transaction (dangerous)

继续说:

This command should be used with care. There is only one level of
rollback, and there is no way to undo a rollback. It will also restore the
dirstate at the time of the last transaction, losing any dirstate changes
since that time. This command does not alter the working directory.

回滚是唯一的非扩展名mercurial命令,用于删除历史记录,并且已经讨论过如何将其移至默认禁用的扩展名,例如类似破坏性的堂兄strip和{ {1}}。

不是它现在可以帮到你,但是在将来克隆之前做回滚。或者更好的是改为purge。 Backout会添加更改的反转,产生相同的最终修订版本,但会有更准确的历史记录(“我做了这个”,“我解除了它”)。