Edit: Сначала я неправильно понял - я думал, вы хотите сохранить текущую копию рабочего дерева каждого файла. Если вам нужна копия, которая была в первой фиксации, используйте git log
, чтобы найти первую фиксацию, затем используйте git reset --hard
с идентификатором ha sh из этой фиксации, как в ответ joshnuss или ответ тувока . (Поскольку ответ joshnuss показывает, как найти идентификатор ha sh, который нужно использовать для этого.)
Тогда вам решать, следует ли удалить и воссоздать базовый репозиторий Git в каталоге .git
или оставьте текущий: имя вашей ветки master
теперь будет определять эту самую первую фиксацию, а не последнюю фиксацию, а git log
покажет вам только одну фиксацию.
Чтобы расширить ответ Вадика и показать вам, почему он может быть правильным для того, что вы хотите сделать, помните о Git:
Git на самом деле означает фиксирует . Git имеет имена веток и другие имена, но их основная функция - помогать вам - и Git самим - находить коммиты.
Коммит - это полный снимок всех ваши файлы. Эти файлы, попав в такую фиксацию, никогда не могут быть изменены . Они находятся в специальном формате Git только для чтения, который может использовать только Git.
Репозиторий лучше, чем «всего два базы данных », но по сути это большая база данных, в которой хранятся все ваши коммиты (вместе с другими поддерживающими Git объектами), а также меньшая база данных имен - имен ветвей, тегов и т. д. на.
Когда вы git clone
, git fetch
или git push
, вы подключаете свой Git к другому Git. Два Git общаются друг с другом, и передача совершается. По большей части, хотя они могут смотреть на имена друг друга (имена веток и тегов), они не обязательно передают имена - это фиксирует , что иметь значение. Каким бы Git ни было получение коммитов, после получения будет обновлено какое-то имя, чтобы запомнить коммиты. Но это фиксирует , который они действительно копируют. Коммиты распространяются повсюду; имена нет, или, по крайней мере, не обязательно.
Поскольку файлы внутри Git коммит буквально не могут быть изменены, и не могут действительно могут использоваться чем-либо, кроме самого Git, они все просто архивы . Git должен давать вам способ извлекать любую заданную фиксацию, чтобы вы могли получить обычные повседневные файлы, которые вы можете использовать .
Эти обычные повседневные файлы go в том, что Git называет вашим рабочим деревом или рабочим деревом . Дерево работ в прямом смысле слова вообще не является частью репозитория. Это не фиксация и не имя ветки: его нет в двух первичных базах данных Git. (Фактически, вы можете запустить только хранилище Git, в котором вообще нет рабочего дерева: так работают серверы, подобные GitHub.)
Но в рабочем дереве есть все файлы вы работаете. Если ваша цель - стереть все, что вы сделали до сих пор в Git, возможно, безвозвратно, и начать заново, но сохранить файлы , с которыми вы работаете, тогда вам нужно избавиться от существующего репозитория , сохранив при этом свое дерево работ.
К счастью, это очень просто , потому что дерево работ - это то место, где вы работаете, и собственно репозиторий находится в скрытом каталоге / папке наверху вашего рабочего дерева с именем .git
. Уберите этот .git
с пути или удалите его, и репозиторий окажется где-то в другом месте или полностью исчез. Затем запустите git init
без дополнительных параметров или аргументов (или git init .
, но .
является избыточным), и Git создаст новый полностью пустой репозиторий, создав новую папку / каталог .git
и поместив в это вспомогательные файлы, включая пустые имена и базы данных объектов.
(Если вы переместите каталог .git
в сторону - например, в какую-нибудь другую папку проекта - это даст вам возможность go в него позже и снова найти коммиты, на случай в конце концов, вы решили, что начинать заново было плохой идеей.)