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


上班的工作。当我不在回购的尖端时回滚了。丢失的文件。寻找相当于保存我的工作的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:更好的头衔。


10453
2017-09-11 07:32


起源

我不知道为什么人们没有在这里评论/回答,但有一些关于reddit的讨论可能对你有所帮助: reddit.com/r/programming/comments/kc6lx/... - MatrixFrog
所以几年后,我正在寻找各种git / mercurial文章,我发现了这一点。我还发现2.0以后现在带有触发器的安全性。您仍然可以执行您描述的不安全行为,但只能使用“--force”。回滚并不意味着“在我们的脑海里让我们回到过去”,这意味着“我要用刀子把它雕刻出来。” - Avery Payne


答案:


对不起,他们走了。

帮助摘要 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 和 purge

并不是说它现在可以帮助你,但是在将来克隆之前做回滚。或者更好的做一个 backout 代替。 Backout会添加一个变化的倒数,产生相同的最终修订版本,但会有更准确的历史记录(“我做了这个”,“我解开了它”)。


11
2017-09-11 21:24