There are two considerations here.
First, if you have already run a migration, then it's recorded in database and if you just remove a file than you will run into problems: your database will refer to non-existent migration. There is a solution: run migrations 2 and 3 backwards with ./manage.py migrate my_app 0001
, then delete migration files. If you can't migrate back (e.g. you messed up with your database manually) then you can fake migrate back with ./manage.py migrate my_app 0001 --fake
and set up database as it should be manually. Fake means that no schema altering would be done, but notes of migrations run will be removed.
Second, you pushed you code and someone else have run your migrations. In this case you need to create a new migration that reverts anything you've done with 2 and 3. This way anyone will revert unneeded changes by running your new migration.