На самом деле процесс исправления работает одинаково, независимо от того, есть незафиксированные изменения или нет. Я всегда делаю это следующим образом:
[... make changes ...]
hg qnew -m "foo bar changes" foobar.patch
--> new empty patch at top of queue
hg qrefresh
--> this adds all diffs from 'hg diff' into the current top patch
РЕДАКТИРОВАТЬ: @CaseBash правильно указал, что я не прав насчет текущего поведения по умолчанию!