Сам не великий специалист, но вижу ответ вот каким:
1. Есть две команды - commit и push. Первая добавляет коммит в локальный checkout (не знаю, как это верно в русской терминологии называется). Вторая отправляет корзину коммитов в удаленный репозиторий
2. Коммиты не удаляются, но зато их можно откатить - отрастить ветку от любого прошлого коммита. Называется операция не (как справедливо замечают в комментарии к ответу) pick cherry, а как-то по другому.
3. Общее правило хорошего тона, как я понял, такое - отправлять в репозиторий только изменяющиеся файлы. То есть, например, код, но не сторонние библиотеки. По поводу конкретной сегментации изменяемых файлов - git-клиенты сам определяет, какие файлы менялись в рамках коммита и синхронизирует их выборочно.