?

Log in

No account? Create an account

Previous Entry Share Next Entry
Git Forget: забыть всё, или свёртываем всю историю в один коммит
Strawberry
sanmai
Читайте дальше: http://www.alexeykopytko.com/2011/git-forget.html


Иногда бывает нужно свернуть всю историю какого-то репозитария в один коммит. В этом случае git rebase -i не подходит, потому что от него останется два коммита, первый и последний.
На помощь нам приходит низкоуровневая команда 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 log
commit bc1f1192112cc1c8141e1efdc0601c7bb67d5aa0
Author: You 
Date:   Tue Aug 16 21:40:00 2011 +0900

    начало работы над новым проектом
Вот и всё!
Tags: , ,

  • 1
А я неоднократно делал что-то вида:

rm -rf .git && git init && git add . && git ci -m 'Начало работы над новым проектом'

Это неудобно. Например, если какие-то файлы подпадают под .gitignore, но принудительно добавлены, при git add . они сами снова не добавятся.

вот как сделать тож самое для Mercurial ?

Если б я знал!

  • 1