Как очистить все коммиты с удаленного репозитория github - PullRequest
4 голосов
/ 27 июля 2011

Я по ошибке отправил сотни коммитов из моего локального репо во вновь созданное репозиторий github. Как я могу очистить / удалить все эти коммиты на удаленном репо, чтобы github repo был чист, как это было в начале? Я хотел бы также потерять историю этих действий. Я хотел бы сделать это без ущерба для моего локального репо.

Я не могу удалить ветку, так как это основная ветка github.

Ответы [ 2 ]

10 голосов
/ 27 июля 2011

Вы могли бы:

- git clone <your github repo>
- git reset --hard <an_older_commit> (where you didn't have those huge files)
- git push --force origin master

Таким образом:

  • Ваше первоначальное локальное репо не затронуто (и вы можете исправить это, чтобы не толкать эти файлы снова)
  • ваше удаленное хранилище (GitHub) больше не видит те коммиты с огромными файлами в нем.
  • GitHub будет периодически запускать git gc на своей стороне, полностью очищая файлы, на которые нет ссылок.

Однако OP Martin упоминает:

как мне сделать reset --hard на позицию перед первым коммитом?
то есть я бы хотел, чтобы репо было пустым, чтобы не откатываться до предыдущего коммита

В этом случае создайте новый локальный репо, сделайте первый небольшой коммит и push --force, который совершит коммит.
В более общем смысле, я всегда стараюсь иметь первый маленький начальный коммит в основной ветке при создании репо, чтобы иметь возможность вернуться к минимальному коммиту или запустить новую ветку (для несвязанного усилия по разработке) из указанного минимального коммита.

2 голосов
/ 06 августа 2011
git push -f REMOTE COMMIT:BRANCH

Например, чтобы принудительно отменить ветку master на удаленном origin до фиксации с идентификатором 123456, вы должны сделать

git push -f origin 123456:master
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...