У нас имеется один репозиторий и один проект развернутый локально.
1) Я сделал коммит commit1, задеплоил изменения в staging на сервер (например, чтобы показать руководителю, не программисту).
2) Руководитель сказал хорошо, но нужно сделать кое-что другое, совсем другой функционал. А commit1 пока не деплоить на staging.
3) Я делаю commit2 в репозиторий, опять деплою на staging.
Все нормально, нужно деплоить в production. Но в репозитории уже есть commit1 который деплоить в production нельзя, соответственно я в ручную возвращаю старый код в этих файлах и только тогда деплою в production изменения commit2.
staging я имею ввиду среда на сервере, а не ветка в репозитории.
Тут дело в том, что выходит так что у меня получается оба коммита в удаленном репозитории - commit1 и commit2. Но в случае, если я коммичу на staging, то это не важно. А в случае с production мне приходится удалять вручную изменения из commit1 и делать новый commit3 (тогда по сути получается, что commit3 это commit2 без commit1)
Ваши эти commit1 и commit2 должны быть в разных ветках, причём ни один из них, по-хорошему, не должен быть в master-е.
В master они попадут как раз после того, как фичи будут готовы (или даже уже оттестированы на stage).