Можно ли как-то «очистить» ветку от ненужных промежуточных коммитов?

Да, ветку в Git можно "очистить" от ненужных промежуточных коммитов. Это можно сделать с помощью нескольких способов, в зависимости от того, какие изменения вы хотите удалить и в какой поток разработки они включены.

Один из способов — использовать команду git rebase. Эта команда позволяет переписать историю коммитов ветки, перемещая, редактируя, удаляя или объединяя коммиты. Чтобы удалить ненужные коммиты, необходимо выполнить следующие шаги:

1. Убедитесь, что вы находитесь в ветке, которую хотите очистить, используя команду git branch или git status.
2. Запустите команду git rebase -i HEAD~n, где n — количество коммитов, которые вы хотите объединить или удалить. Например, если у вас есть 5 ненужных коммитов, вы можете использовать git rebase -i HEAD~5.

Эта команда откроет текстовый редактор с списком коммитов, которые вы выбрали для редактирования. Возле каждого коммита будет указано, что с ним нужно сделать:

- pick: оставить коммит без изменений.
- edit: оставить коммит, но позволить вам внести изменения, например, удалить ненужные изменения.
- squash: объединить коммит с предыдущим коммитом.
- fixup: объединить коммит с предыдущим коммитом, но отбросить сообщение о коммите.

3. Измените команды ребейза для ненужных коммитов на drop. Например, если у вас есть коммиты 2, 3 и 4, которые вы хотите удалить, измените соответствующие строки в редакторе на drop:

pick c83f3b1 Commit 1
drop adb4f27 Commit 2
drop 1c2d654 Commit 3
drop 9f43b9a Commit 4

...

4. Сохраните и закройте файл в редакторе.

Git выполнит команды реорганизации истории коммитов в соответствии с вашими инструкциями. Если указанные коммиты были применены в других ветках, Git автоматически применит изменения к этим веткам.

Учтите, что изменение истории коммитов может вызвать проблемы, если другие люди работают над этим же репозиторием или если уже были выполнены публичные пулл-реквесты. Поэтому всегда важно предупредить других разработчиков, когда изменяется история коммитов, чтобы избежать возможных конфликтов.