【发布时间】:2011-07-28 07:13:45
【问题描述】:
假设我已经更改了许多文件,因此当我执行 hg 状态时,它会出现以下内容:
M ../../file1
M ../../file2
M ../../file3
如果我只想对我对 file2 所做的更改执行 qrefresh 并隐式放弃我对 file1 和 file3 所做的更改以使它们恢复到原始状态怎么办?有没有办法用 mercurial 做到这一点?我对整个版本控制还很陌生。
【问题讨论】:
假设我已经更改了许多文件,因此当我执行 hg 状态时,它会出现以下内容:
M ../../file1
M ../../file2
M ../../file3
如果我只想对我对 file2 所做的更改执行 qrefresh 并隐式放弃我对 file1 和 file3 所做的更改以使它们恢复到原始状态怎么办?有没有办法用 mercurial 做到这一点?我对整个版本控制还很陌生。
【问题讨论】:
由于hg qrefresh 会自动包含所有更改,因此您只需排除某些文件,刷新实际上会将这些文件的所有更改从补丁中删除。然后你就可以恢复文件了。
这会刷新补丁中除file1 和file3 之外的所有内容(补丁现在不包含任何更改):
hg qrefresh -X ../../file1 -X ../../file3
现在file1和file3还有一些变化,需要还原:
hg revert ../../file1 ../../file3
这会将当前版本更改为../../file1.orig 和../../file3.orig,以防您发现再次需要更改。您也可以添加--no-backup 开关,这些开关不会被创建。
您也可以按相反的顺序执行此操作:
hg revert ../../file1 ../../file3
hg qrefresh
这次刷新不需要参数,因为与工作目录的父级相比,这两个文件没有变化,因此将从补丁中消失(刷新补丁基本上是重新编写补丁)。我会这样做,但我也想演示-X 开关。
查看hg help revert 和hg help qrefresh 了解更多信息。
【讨论】:
hg qrefresh ../../file2