Как удалить\закомиттить только нужный коммит?
git rebase -i HEAD~N
- где N - количество мусорных коммитов. Нужно будет выполнить squash. Для этого на первой строке пишем p (pick up), а на остальных s (squash).
После того, как исправите ситуацию в локальном репозитории сделайте принудительный пуш:git push -f
Вообще, делать пробы лучше в отдельной ветке - так гораздо меньше головняков...
Если пробы все-таки хочется сохранить (хотя бы временно), то можно сделать так:
Итак у вас есть коммит аааааа (последний - о котором вы пишите) и есть коммит сссссс. Пробные коммиты находятся как-раз между аааааа и сссссс. Ветка master, по вашему описанию, находится на самом верху, т.е. на аааааа.
1. Создаем тестовую ветку: git branch Tests (теперь на аааааа две ветки)
2. Переносим master на последний полезный коммит: git reset --hard cccccc
3. Копируем нужный коммит: git cherry-pick аааааа
4. Отправляем master: git push -f
Посмотреть ситуацию наглядно можно так: git log --oneline --decorate --all --graph
Все. Пробные коммиты остались в отдельной ветке. Ее можно удалить. А если они все-таки нужные и там предполагается продолжит работу, то нужно сделать rebase:
5. git checkout Tests
6. git rebase master
Тестовая ветка передвинется на топ master'а а коммит aaaaaa пропадет, т.к. он уже есть внизу.
ЗЫ: Чтобы не писать длинно git log (это очень частая команда), советую сделать alias.