Забыть всё, или свёртываем всю историю в Git в один коммит
Если нужно свернуть всю историю какого-то репозитария в один коммит, то 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
Начало работы над новым проектом
Вот так просто!