恢复“汞带”后丢失的提交

时间:2019-05-15 11:20:02

标签: mercurial

我有这个Mercurial资料库,其中有一个柜台:

$ echo 1 > count
$ hg add count 
$ hg com -m 'incrementing to 1'
$ echo 2 > count
$ hg com -m 'incrementing to 2'

到目前为止很好,但是后来我犯了一个错误:

$ hg com -m 'incrementing to 3'

因此,我使用hg strip还原了最后一次提交:

$ hg strip --keep -r -2
saved backup bundle to /home/adam/sandbox/count/.hg/strip-backup/bda856a578bf-ff2b025f-backup.hg

我不知道,我犯了另一个更大的错误!我剥离了两个最高的提交,而我只想剥离最高的一个:

$ hg log
changeset:   0:7b5533cf962a
tag:         tip
user:        Adam Victor Nazareth Brandizzi <brandizzi@gmail.com>
date:        Wed May 15 08:00:27 2019 -0300
summary:     incrementing to 1

我如何找回我的提交?

注意:这是我需要使用hg strip的情况的人为例子。无需浪费时间指出还有其他选择。

1 个答案:

答案 0 :(得分:0)

正如我从this message in Mercurial's mailing list中学到的,解决方案非常简单。请注意,当我运行hg strip --keep -r -2时,我在输出中得到了这一行:

saved backup bundle to /home/adam/sandbox/count/.hg/strip-backup/bda856a578bf-ff2b025f-backup.hg

因此,基本上,Mercurial备份了原始历史记录!现在我只需要从中退出:

$ hg pull /home/adam/sandbox/count/.hg/strip-backup/bda856a578bf-ff2b025f-backup.hg
pulling from /home/adam/sandbox/count/.hg/strip-backup/bda856a578bf-ff2b025f-backup.hg
searching for changes
adding changesets
adding manifests
adding file changes
added 2 changesets with 2 changes to 1 files
(run 'hg update' to get a working copy)
$ hg update
1 files updated, 0 files merged, 0 files removed, 0 files unresolved

我的文件恢复到原始状态...

$ cat count 
66

...以及我的历史记录:

$ hg log
changeset:   2:fc4d1cc18a4b
tag:         tip
user:        Adam Victor Nazareth Brandizzi <brandizzi@gmail.com>
date:        Wed May 15 08:00:51 2019 -0300
summary:     incrementing to 3

changeset:   1:bda856a578bf
user:        Adam Victor Nazareth Brandizzi <brandizzi@gmail.com>
date:        Wed May 15 08:00:38 2019 -0300
summary:     incrementing to 2

changeset:   0:7b5533cf962a
user:        Adam Victor Nazareth Brandizzi <brandizzi@gmail.com>
date:        Wed May 15 08:00:27 2019 -0300
summary:     incrementing to 1

现在我可以调用正确的剥离命令(hg strip --keep -r -1)。

如果我们不再拥有备份文件名怎么办?

您可能已经丢失了备份文件名(这确实发生在我身上!),但是您可以在$YOUR_REPO/.hg/strip-backup中找到它。如果您有很多备份,只需按时间顺序列出它们,降序:

$ ls -tl .hg/strip-backup/
total 4
-rw-rw-r-- 1 adam adam 754 May 15 08:10 bda856a578bf-ff2b025f-backup.hg    
-rw-rw-r-- 1 adam adam 754 May 15 08:02 02ac79859dd0-0902f53b-backup.hg

最后一个可能是您想要的那个。