Как сбросить удаленный репозиторий Git, чтобы удалить все коммиты?


164

Как я могу сбросить удаленный и локальный репозиторий Git, чтобы удалить все коммиты?

Я хотел бы начать все заново с текущей главы в качестве первоначального коммита.



Я не хочу выбирать или делать что-то еще, я просто хочу удалить все изменения и сбросить публичное репо. Поскольку я новый пользователь Git, я сделал несколько неправильных коммитов. Удаление каталога .GIT не вариант, так как есть публичный репозиторий.
— Приянк Болия

Вы также можете сделать принудительный push, так что удаление .git dir на самом деле вариант.
— Река Лилит

2
просто придирки, но «пересмотр» является терминологией SVN и не имеет большого смысла в древовидной истории.
— Тамас Селеи

2
@ TamásSzelei «Редакция» является вполне приемлемым синонимом «коммит». Он используется как в книге Pro Git (например, здесь ), так и на страницах руководства Git.
— jub0bs

Ответы:


348

Полностью сбросить?

  1. Удалить .gitкаталог локально.

  2. Создайте репозиторий git:

    $ cd (project-directory)
    $ git init
    $ (add some files)
    $ git add .
    $ git commit -m 'Initial commit'
    
  3. Нажмите на удаленный сервер, перезаписав. Помните, что вы все испортите, делая это ... вам лучше быть единственным клиентом.

    $ git remote add origin <url>
    $ git push --force --set-upstream origin master
    

1
но коммиты исчезли, а хранилище сброшено. Можем ли мы удалить эти предыдущие сообщения также перед именами файлов.
— Приянк Болия

2
Удалите удаленный репозиторий прямо на GitHub и создайте его там.
— Бомба

1
Должен быть git push --force вместо git push -force
— Уильям Нотовидагдо

6
Если вы не хотите фиксировать какие-либо файлы в вашем «Первоначальном коммите», вы можете просто не добавлять какие-либо файлы и добавлять --allow-emptyфлаг в конце git commit -m 'Initial commit'.
— Раф

2
Используя Git 2.3.2, мне пришлось использовать git push --force --set-upstream origin masterНо все остальное работало так, как описано
— Sébastien Stormacq

6

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

$ git push origin +master

И, при необходимости, удалите все остальные ветви как локально, так и удаленно:

$ git push origin :<branch>
$ git branch -d <branch>

0

Если бы я был тобой, я бы сделал что-то вроде этого:

Прежде чем что-то делать, пожалуйста, сохраните копию (лучше, чем потом сожалеть)

git checkout master
git checkout -b temp 
git reset --hard <sha-1 of your first commit> 
git add .
git commit -m 'Squash all commits in single one'
git push origin temp

После этого вы можете удалить другие ветви.

Результат: у вас будет ветка только с 2 коммитами.

Используйте, git log --onelineчтобы увидеть ваши коммиты в минималистичном виде и найти SHA-1 для коммитов!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.