Если нужно свернуть всю историю какого-то репозитария в один коммит, то git rebase -i не подойдет, потому что от него останется два коммита, первый и последний.

Удалять весь .git и заново добавлять все файлы тоже не вариант, так как git add не добавит файлы, добавленные ранее вопреки .gitignore.

Что же делать?

На помощь нам спешит низкоуровневая команда git-commit-tree.

Для начала скопируем исходный репозитарий куда-нибудь, просто на всякий случай:

git clone Project NewProject

Действуем:

cd NewProject
git reset $(echo "Начало работы над новым проектом" | git commit-tree HEAD^{tree})
git reflog expire --all --expire-unreachable=now
git gc --aggressive --prune=now
git remote rm origin

Последние три команды нужны чтобы удалить любые упоминания о коммитах из старого проекта и самом старом проекте. Cообщение при коммите можно заменить на любое другое более подходящее под конкретную ситуацию.

Проверяем:

$ git log
commit bc1f1192112cc1c8141e1efdc0601c7bb67d5aa0
Author: You <you@example.com> 
Date:   Tue Aug 16 21:40:00 2011 +0900

    Начало работы над новым проектом

Вот так просто!