diff --git a/mercurial/commands.py b/mercurial/commands.py
index 15b8a652b558552320dc32373ddad3bbeff5c4ba_bWVyY3VyaWFsL2NvbW1hbmRzLnB5..0e0a52bd58f941c00b2a1d57f23676fa486e58c3_bWVyY3VyaWFsL2NvbW1hbmRzLnB5 100644
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -2279,6 +2279,7 @@
     d = opts["base"]
     strip = opts["strip"]
     wlock = lock = None
+    msgs = []
 
     def tryone(ui, hunk):
         tmpname, message, user, date, branch, nodeid, p1, p2 = \
@@ -2329,7 +2330,10 @@
             finally:
                 files = cmdutil.updatedir(ui, repo, files,
                                           similarity=sim / 100.0)
-            if not opts.get('no_commit'):
+            if opts.get('no_commit'):
+                if message:
+                    msgs.append(message)
+            else:
                 if opts.get('exact'):
                     m = None
                 else:
@@ -2378,6 +2382,8 @@
             if not haspatch:
                 raise util.Abort(_('no diffs found'))
 
+        if msgs:
+            repo.opener('last-message.txt', 'wb').write('* * *\n'.join(msgs))
     finally:
         release(lock, wlock)
 
diff --git a/tests/test-import.t b/tests/test-import.t
index 15b8a652b558552320dc32373ddad3bbeff5c4ba_dGVzdHMvdGVzdC1pbXBvcnQudA==..0e0a52bd58f941c00b2a1d57f23676fa486e58c3_dGVzdHMvdGVzdC1pbXBvcnQudA== 100644
--- a/tests/test-import.t
+++ b/tests/test-import.t
@@ -437,6 +437,14 @@
   $ hg revert -a
   reverting a
 
+
+import with --no-commit should have written .hg/last-message.txt
+
+  $ echo '\n' | cat .hg/last-message.txt -
+  change
+  
+
+
 test fuzziness with eol=auto
 
   $ hg --config patch.eol=auto import --no-commit -v tip.patch