I thought it would only be the latest.
for any new version (eg v4) you would need to have one different migration depending on which is the most current version of the user (thus v1->v4, v2->v4 and v3->v4), and on your next update you would need to add four more migrations, then five on the next etc, exponentially increasing the number of files and the amount of work to keep them all current. and this doesn't even include subversions where several subversions might require the same migration (eg same for v4.0->v5, v4.1->v5, etc).
thus it makes sense to always run all migrations. and since no migration is executed twice on the same map, there also should be no problem when upgrading only from v3 to v4.
the only problem is when you do migrations for the first time (also doing eg v1->v2 and v2->v3) when you only would need to do v3->v4. I'm not sure whether it would be possible to somehow check the current version and then only do the following migrations, but since you can't be sure what the current state is (which version, maybe something was inadvertently changed in a save, etc) each migration should assume as little as possible and do any additional check whether some variable, prototype, entity, research, recipe, whatever really exists and is valid before acting on them. the additional overhead (for checks against nil etc) doesn't matter since each migration is only executed once on each different map.
usual disclaimer: I'm no modder, but this is what i gathered from readin several infos, and what would appear "logical" to me.