Насколько я понимаю, проблема возникает из-за того, что по умолчанию при чекауте ветки игнорируемые и просто неотслеживаемые (untracked) файлы не удаляются из рабочей директории.
Преамбула
Вы написали, что файлы нового проекта у вас добавлены в .gitignore. Это не сомнительная идея:
- Получается, что у вас в коде старого проекта есть игнорирование файлов нового проекта. В ветке старого кода не должно быть того, что относится к новому.
- Если вы игнорируете файлы нового проекта - тогда чтобы их удалить вам нужно либо явно указывать какие файлы нужно удалить либо удалять все игнорируемые файлы. А среди них могут быть такие, которые вам нужны, например, код сторонних дидлиотек, если он у вас есть или локальные конфиги и т.п.
Вы можете убрать из .gitignore старого проекта все, что относится к новому и просто удалять все untracked файлы и папки при чекауте с помощью команды
git clean -fd. Но это не очень удобно потому, что
- При переключении между ветками будет создаваться и удаляться большое количество файлов, а это лишняя нагрузка на ФС и время
- Вводить данные команды руками скорее всего лениво (правда, можно написать alias для их автоматизации)
Решение
Скорее всего в вашем случае наиболее адекватным решением будет иметь
две рабочие директории - для текущей версии проекта и для новой. А в редких случаях, когда у вас так получается, что вы делаете переключение между этими версиями в рамках одной рабочей директории выполнять
git clean -fd