在Mercurial中,为什么我们不能在有其他修改过的文件时撤销提交?

时间:2010-06-29 21:28:39

标签: mercurial dvcs

昨天我提交了一个文件然后想要退出,但Mercurial说无法退出,因为我在项目中有其他修改过的文件......

这有点奇怪......每个文件都不是原子级别的?提交1个文件然后退出1个文件?

其次,我可以将修改后的文件A,B,C的副本保存到tmp文件,hg还原它们,然后退出,然后将这些tmp文件复制回A,B,C,而不是与上次提交的hg退出相同但只是更多的工作?

2 个答案:

答案 0 :(得分:3)

通常,执行退出意味着进行合并。合并时,工作副本用作暂存空间:合并冲突显示为工作Coyp中文件的更改,您可以通过编辑工作副本中的文件来解决它们。这就是为什么Mercurial在合并或退出之前坚持要求您拥有干净的工作副本的原因:Mercurial在需要您解决冲突时,实际上没有其他好的存储文件。

就个人而言,我从未遇到过这个问题。我从来没有修改过的文件 - 我要么提交它们,要么将它们存放在MQ补丁中。如果你不想使用MQ,那么就简单

hg diff > tmp
hg revert --all
# working directory is now clean, do your merge/backout/...
hg import --no-commit tmp

足以处理你的案子。这当然被编写扩展的好人包含在更容易的命令中:请参阅attic extension作为示例。

答案 1 :(得分:2)

不。 Mercurial不是文件修订工具,它是变更集修订版。变更集包括受特定更改影响的所有文件,而不是单个文件。

是的,从理论上讲,恢复所有打开的文件,退出然后再次编辑这些文件将达到与退出单个文件相同的效果。但是,实际上,repo的历史记录不包含每个文件的单独条目,因此您无法仅回滚其中一个文件。

相关问题