Как правильно коммитить?
Делаем временную ветку temp1 и пушим туда все что угодно.
Потом, когда закончим пилить фичу, переключаемся обратно на master или dev и делаем 
git merge --squash temp1
Все изменения перекочуют в master/dev, но не будут закоммичены.
Теперь можно делать обычный коммит с описанием фичи, все будет в одном коммите.
После всего удаляем временную ветку с ключом --force
Временную ветку лучше назвать как-то более понятно, чем temp1, если работаете не одна. feat-super-puper.
Как правильно поступать, как не плодить такие плохие коммиты или как их потом удалять? 
* пушим в одну ветку все плохие и хорошие коммиты
* когда работа над фичей закончена, делаем git reset на коммит до наших изменений
* коммитим все наши изменения в виде одного (или нескольких) коммита(ов)
* profit
При таком походе есть пара нюансов: пушить конечный коммит надо будет с форсом (--force), если кто-то вздумает смержить недоделанную ветку, то ничего хорошего это не принесёт.