Mercurial Hg更新到以前的提交删除任何更改
做了一个Mercurial Hg更新到以前的提交删除任何更改,mercurial,Mercurial,做了一个 working directory 在里面复制了一些目录。。。更改了一些文件。做过 hg commit (resulted in rev3) 如何准确返回到rev3的状态hg update 3会将文件更改为rev3中的状态,但也会将所有复制的目录保留在其中。我想获得工作目录,但不包含复制的目录和文件,这些目录和文件是在rev3之后添加的。这对我来说是不可能的: hg add hg commit (resulted in rev4 - tip) 现在第一个first已经存在
working directory
在里面复制了一些目录。。。更改了一些文件。做过
hg commit (resulted in rev3)
如何准确返回到rev3的状态
hg update 3
会将文件更改为rev3中的状态,但也会将所有复制的目录保留在其中。我想获得工作目录,但不包含复制的目录和文件,这些目录和文件是在rev3之后添加的。这对我来说是不可能的:
hg add
hg commit (resulted in rev4 - tip)
现在第一个first
已经存在,但是第二个second
没有
您确定在提交之前已在新目录中添加了所有内容吗?就像Jon所写的那样,Mercurial通常会在提交之后尝试清理。因此,当您
hg update
时,您应该准确地返回您所承诺的内容。我猜你看到的是以下行为:
> hg init
> mkdir first
> jed first/foo.txt
> hg add
adding first/foo.txt
> hg commit -m asd
> mkdir second
> jed second/foo.txt
> hg add
adding second/foo.txt
> hg commit -m asd
> hg update 0
因此,未跟踪的dir/bar.o
文件已被保留,但跟踪的dir/bar.c
文件已被正确删除。也就是说:Mercurial不会删除未跟踪的文件,因为它不知道这些文件是否包含有价值的数据。即使文件被.hgignore
中的模式忽略,这也适用。如果目录只包含跟踪的dir/bar.c
文件,那么当您更新到不需要该目录的修订版时,该目录将被完全删除
清理未跟踪文件的正常方法是使用。可以是。。。不知道了,删除了。但很高兴知道这不是预期的行为,所以至少我会知道这是我的错误。。。刚刚试过你的例子,所以是的,这可能是一个错误的来源。
$ hg init repo
$ cd repo
$ echo "# some C program" > foo.c
$ hg add foo.c
$ hg commit -m first
$ mkdir dir
$ echo "$ other C program" > dir/bar.c
$ hg add dir/bar.c
$ hg commit -m second
$ echo "object file" > dir/bar.o
$ hg update 0
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ ls
foo.c dir
$ ls dir
bar.o