In this article, I'll show you the cause of the following error and how to fix it.
ERROR [root] Error: Multiple head revisions are present for given argument 'head'; please specify a specific target revision, '<branchname>@head' to narrow to a specific head, or 'heads' for all heads
This error will showup whenever you run Flask Migrate upgrade migration command using
(venv) $ flask db upgrade
We'll demystify when this error will occur with an example scenario. Let the initial migraion state be
* C (head) | * B | * A
Say, two developers create a migration branches from
* F | | * E | | | * D |/ * C (head) | * B | * A
One developer pushes
F to become new
* F (head) | | * E (head) | | | * D |/ * C | * B | * A
Now if another developer merges the changes and run
flask db upgrade will end up having the above ERROR.
This inconsistency state can be identified using the command
(venv) $ flask db history
To see the following output, where we can see it clearly there are two
head revisions present.
D -> E (head), empty message C -> D, empty message C -> F (head), empty message B -> C (branchpoint), empty message A -> B, empty message <base> -> A, empty message
Now, you can manually resolve this conflict by modifying the
down_revision or using the following command
(venv) $ flask db merge heads -m "merging two heads"
You can even explicitly mention which two heads you wanted to merge like
(venv) $ flask db merge D F -m "merging D and F"
Hope this helps!