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

164

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

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

Приянк Болия
источник
связанные: stackoverflow.com/questions/495345/…
miku
Я не хочу выбирать или делать что-то еще, я просто хочу удалить все изменения и сбросить публичное репо. Поскольку я новый пользователь 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 для коммитов!

Kwnstantinos Nikoloutsos
источник