注意:我的回答与 Aptana 无关,而是涵盖了我认为您的问题所在。
我认为主要问题是对 Mercurial 如何存储其更改的误解,这来自 Subversion 背景是完全合理的。
在 Subversion 中,可以认为更改历史记录是按文件存储的。也就是说,如果您更改两个文件并提交它们,您很容易而且经常会遇到工作副本中的文件处于不同版本的情况。
在 Mercurial 中,更改历史记录存储在整个存储库中。提交将创建一个新的“变更集”,其中存储了当时整个存储库的状态。当您决定 push 将更改输出到另一个存储库时,所有修改(或添加、或删除或...)都将随该更改一起推出。
需要注意的是,当您决定 commit 存储库的新变更集时,您可以选择性地包含或排除文件。未包含的文件将作为待修改保留在您的工作副本中,可以在新的变更集中提交。
我希望这对你有意义 - 如果你已经理解它,这是一个合乎逻辑的概念,但我觉得很难解释。
那么,关于你的问题。
假设您的存储库中有两个文件,file1 和 file2(即 foo 和 bar)。您已经更改了它们,但它们涉及不同的问题 - 它们可以作为不同的变更集提交:
$ hg log
changeset 0:....
summary: First commit
$ hg st
M file1
M file2
$ hg commit -I file1 -m "Changed file1"
$ hg log
changeset 1:....
summary: Changed file1
changeset 0:....
summary: First commit
$ hg st
M file2
在这里您可以看到我们只向存储库提交了一个文件,并且它创建了一个具有当时存储库完整状态的新变更集,减去对file2 的更改.我们现在可以做同样的事情,提交file2,这将创建另一个变更集。这种方法的问题是变更集是根据它们的父级排序的,所以你不能轻易地将push 更改为file2,而不推动它的父级 - 但它可能更接近你所追求的.
TL;DR : SVN 存储单个文件的状态,Mercurial 将存储库的状态作为一个整体存储。
我非常推荐阅读Mercurial: The Definitive Guide。它在某些地方有点过时,但我认为它会更好地传达这个概念。