diff -rNu django-1.7/django/core/management/commands/makemigrations.py django-1.7-makemigrations-patch/django/core/management/commands/makemigrations.py
--- django-1.7/django/core/management/commands/makemigrations.py	2014-07-20 08:37:13.397964916 +0200
+++ django-1.7-makemigrations-patch/django/core/management/commands/makemigrations.py	2014-08-16 16:37:44.569985609 +0200
@@ -25,6 +25,8 @@
             help="Create an empty migration."),
         make_option('--noinput', action='store_false', dest='interactive', default=True,
             help='Tells Django to NOT prompt the user for input of any kind.'),
+        make_option('--name', '-n', action='store', dest='name', default=None,
+            help="Use this name for migration file(s)."),
     )
 
     help = "Creates new migration(s) for apps."
@@ -38,6 +40,7 @@
         self.dry_run = options.get('dry_run', False)
         self.merge = options.get('merge', False)
         self.empty = options.get('empty', False)
+        self.migration_name = options.get('name')
 
         # Make sure the app they asked for exists
         app_labels = set(app_labels)
@@ -100,7 +103,12 @@
                 (app, [Migration("custom", app)])
                 for app in app_labels
             )
-            changes = autodetector.arrange_for_graph(changes, loader.graph)
+            # here is where the --empty migrations are processed
+            changes = autodetector.arrange_for_graph(
+                changes=changes,
+                graph=loader.graph,
+                migration_name=self.migration_name,
+            )
             self.write_migration_files(changes)
             return
 
@@ -109,6 +117,7 @@
             graph=loader.graph,
             trim_to_apps=app_labels or None,
             convert_apps=app_labels or None,
+            migration_name=self.migration_name,
         )
 
         # No changes? Tell them.
diff -rNu django-1.7/django/db/migrations/autodetector.py django-1.7-makemigrations-patch/django/db/migrations/autodetector.py
--- django-1.7/django/db/migrations/autodetector.py	2014-08-13 13:56:57.432991383 +0200
+++ django-1.7-makemigrations-patch/django/db/migrations/autodetector.py	2014-08-16 16:00:24.000000000 +0200
@@ -31,14 +31,14 @@
         self.to_state = to_state
         self.questioner = questioner or MigrationQuestioner()
 
-    def changes(self, graph, trim_to_apps=None, convert_apps=None):
+    def changes(self, graph, trim_to_apps=None, convert_apps=None, migration_name=None):
         """
         Main entry point to produce a list of appliable changes.
         Takes a graph to base names on and an optional set of apps
         to try and restrict to (restriction is not guaranteed)
         """
         changes = self._detect_changes(convert_apps, graph)
-        changes = self.arrange_for_graph(changes, graph)
+        changes = self.arrange_for_graph(changes, graph, migration_name)
         if trim_to_apps:
             changes = self._trim_to_apps(changes, trim_to_apps)
         return changes
@@ -937,7 +937,7 @@
                     dependencies=dependencies,
                 )
 
-    def arrange_for_graph(self, changes, graph):
+    def arrange_for_graph(self, changes, graph, migration_name=None):
         """
         Takes in a result from changes() and a MigrationGraph,
         and fixes the names and dependencies of the changes so they
@@ -971,11 +971,16 @@
                 if i == 0 and app_leaf:
                     migration.dependencies.append(app_leaf)
                 if i == 0 and not app_leaf:
-                    new_name = "0001_initial"
+                    if migration_name is None:
+                        new_name = "0001_initial"
+                    else:
+                        new_name = "0001_%s" % migration_name
                 else:
+                    if migration_name is None:
+                        migration_name = self.suggest_name(migration.operations)[:100]
                     new_name = "%04i_%s" % (
                         next_number,
-                        self.suggest_name(migration.operations)[:100],
+                        migration_name,
                     )
                 name_map[(app_label, migration.name)] = (app_label, new_name)
                 next_number += 1
