在Mercurial中使用hg revert

62

我正在使用Mercurial。我克隆了一个代码库。为了调试,我在一个Java文件中更改了几行代码,但我并没有提交这些更改。我只想将它们还原回代码库中最初的状态。我尝试过hg revert filename.java,它确实将文件还原了,但是现在当我执行hg status时,我发现我的文件夹中新增了一些文件,比如:

? filename.java.orig

我可以直接删除这些文件吗?为什么使用 revert 命令时 Mercurial 会生成这些文件?

8个回答

88

你也可以使用 --no-backup 标志,这样 .orig 文件就不会被创建。

hg revert --no-backup filename.java

从Mercurial 2.0开始,你可以使用-C标志来阻止创建.orig文件。

hg revert -C filename.java

使用以下命令可以节省一些打字:hg revert -C filename.java - jbranchaud
-C 快捷键是在 Mercurial 2.0 中引入的,请参见 http://mercurial.selenic.com/wiki/WhatsNew。 - Fooman
8
我不确定 -C 是如何代表 --no-backup 的……它是指勇敢的撤销吗?请给我翻译这段话。 - dreamlax
1
我猜它代表清理,因为它具有与调用 hg revert FILE && hg clean 相同的效果。 - Florian Pilz

48

是的,你可以删除它们。这是一个安全功能,以防你撤销了你不想撤销的事情。


23

我发现清除扩展非常方便。用法:

hg purge

"这个扩展可以清除所有未被Mercurial跟踪的文件和目录"

...包括.orig文件但排除被忽略的文件(除非您使用 --all 参数)。


8

正如其他人所指出的,你可以安全地删除这些文件。

你可以通过在仓库根目录执行以下命令来删除它们:

rm `hg st -un | grep orig`

如果你想回滚,并且完全不关心备份原始文件,你需要的命令是:

hg update -C

6

这些是您还原之前的文件副本。如果您不需要它们,可以手动删除或使用Purge扩展程序进行删除:

hg clean

1
标准Mercurial中有“clean”命令--也许你想到的是清除扩展和hg purge - Martin Geisler
1
@马丁:输入 hg clean 的时候提示说 clean 是由清除扩展提供的。 - Casebash
2
Casebash:啊,没错——清理扩展提供两个命令名称:hg purgehg clean - Martin Geisler

5

这些备份文件可以用于合并和还原操作(参见man页面)。如果您不需要它们,可以添加忽略规则或直接删除它们。


0

这些是相当常见的,来自各种操作。我工作的一个中等大小的代码库里就有237个。我不喜欢删除可能会有用的东西,也没有理由用相同的后缀命名合法文件,所以我将以下内容添加到.hgignore中:

.\.orig$

0

这个批处理文件是我自己制作的。

IF "%1%" == "d" (
    del /s *.orig
    del /s *.rej
 ) ELSE ( 
    del /s /p *.rej
    del /s /p *.orig
 )

帮助: 将此内容保存为orig.bat

  1. 运行orig d以一次性删除所有拒绝和原始文件,无需确认
  2. 运行orig以带有确认的方式删除文件[安全机制]

希望这对您有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接