diff --git a/hgext/fetch.py b/hgext/fetch.py
index 210ee6204a295d21bf444d98dc92cf7e23973c71_aGdleHQvZmV0Y2gucHk=..4c1aa6affe6099f8dcb912588ef589abe4bfafc3_aGdleHQvZmV0Y2gucHk= 100644
--- a/hgext/fetch.py
+++ b/hgext/fetch.py
@@ -65,5 +65,6 @@
             message = (cmdutil.logmessage(opts) or
                        (_('Automated merge with %s') %
                         util.removeauth(other.url())))
+            force_editor = opts.get('force_editor') or opts.get('edit')
             n = repo.commit(mod + add + rem, message,
                             opts['user'], opts['date'],
@@ -68,6 +69,6 @@
             n = repo.commit(mod + add + rem, message,
                             opts['user'], opts['date'],
-                            force_editor=opts.get('force_editor'))
+                            force_editor=force_editor)
             ui.status(_('new changeset %d:%s merges remote changes '
                         'with local\n') % (repo.changelog.rev(n),
                                            short(n)))
@@ -102,6 +103,6 @@
     try:
         wlock = repo.wlock()
         lock = repo.lock()
-        mod, add, rem = repo.status()[:3]
+        mod, add, rem, del_ = repo.status()[:4]
         if mod or add or rem:
             raise util.Abort(_('outstanding uncommitted changes'))
@@ -106,5 +107,7 @@
         if mod or add or rem:
             raise util.Abort(_('outstanding uncommitted changes'))
+        if del_:
+            raise util.Abort(_('working directory is missing some files'))
         if len(repo.heads()) > 1:
             raise util.Abort(_('multiple heads in this repository '
                                '(use "hg heads" and "hg merge" to merge)'))
@@ -116,7 +119,8 @@
     'fetch':
         (fetch,
         [('r', 'rev', [], _('a specific revision you would like to pull')),
-         ('f', 'force-editor', None, _('edit commit message')),
+         ('e', 'edit', None, _('edit commit message')),
+         ('', 'force-editor', None, _('edit commit message (DEPRECATED)')),
          ('', 'switch-parent', None, _('switch parents when merging')),
         ] + commands.commitopts + commands.commitopts2 + commands.remoteopts,
         _('hg fetch [SOURCE]')),
diff --git a/tests/test-fetch b/tests/test-fetch
index 210ee6204a295d21bf444d98dc92cf7e23973c71_dGVzdHMvdGVzdC1mZXRjaA==..4c1aa6affe6099f8dcb912588ef589abe4bfafc3_dGVzdHMvdGVzdC1mZXRjaA== 100755
--- a/tests/test-fetch
+++ b/tests/test-fetch
@@ -52,5 +52,8 @@
 echo g > g/g
 hg --cwd g ci -d '6 0' -Amg
 
+hg clone -q f h
+hg clone -q g i
+
 echo % should merge f into g
 hg --cwd g fetch -d '7 0' --switch -m 'automated merge' ../f
@@ -55,2 +58,6 @@
 echo % should merge f into g
 hg --cwd g fetch -d '7 0' --switch -m 'automated merge' ../f
+
+rm i/g
+echo % should abort, because i is modified
+hg --cwd i fetch ../h
diff --git a/tests/test-fetch.out b/tests/test-fetch.out
index 210ee6204a295d21bf444d98dc92cf7e23973c71_dGVzdHMvdGVzdC1mZXRjaC5vdXQ=..4c1aa6affe6099f8dcb912588ef589abe4bfafc3_dGVzdHMvdGVzdC1mZXRjaC5vdXQ= 100644
--- a/tests/test-fetch.out
+++ b/tests/test-fetch.out
@@ -71,3 +71,5 @@
 merging with 3:cc6a3744834d
 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
 new changeset 4:55aa4f32ec59 merges remote changes with local
+% should abort, because i is modified
+abort: working directory is missing some files