&gt; You can commit a subset of changed files in most version control systems, but it isn&#x27;t smart because you didn&#x27;t test that state and it&#x27;s relatively easy to garble files.<p>The clean solution here is to stash&#x2F;shelve the changes you don&#x27;t want, then commit the ones you wanted. This works pretty much the same way in either VCS.<p>&gt; Not having the index is a very practical difference for users, because it means that you do not get any editable &quot;staging&quot; commits, only commits that will be on the permanent record.<p>Use hg commit [-i], hg commit --amend [-i], and hg uncommit (with evolve) to modify the most recent commit as needed. Or, frankly, just use hg shelve [-i] to do the reverse as described above.<p>The Git index doesn&#x27;t improve upon the situation, since you still can&#x27;t test the partial commit without stashing the remaining changes first. At which point you could have just done that first.<p>In any event, the closest equivalent of Git&#x27;s index in Mercurial is MQ, not hg commit -i and friends. The difference is that in Mercurial it&#x27;s opt-in rather than opt-out.