Поиск по сайту:

Как полностью сбросить репозиторий Git (включая неотслеживаемые файлы)


Команды Git сложны, и вы часто ловите себя на мысли:К черту все, я просто начну сначала! К счастью, Git создан для отслеживания каждой версии ваших изменений, и если вы что-то испортили, , он предоставляет инструменты для сброса вашего репозитория обратно в его старое рабочее состояние.

Сохранение изменений (Git Stash)

Прежде чем запускать команду для сброса хранилища, убедитесь, что вы не теряете данные, которые хотите сохранить.

Git предоставляет несколько различных видов сброса. Мягкие и смешанные сбросы вернут репозиторий в состояние, в котором он был при определенной фиксации (часто HEAD ветки), но сохранят ваши локальные изменения, которые вы еще не зафиксировали. Жесткие сбросы, с другой стороны, разрушительны и отбрасывают изменения, которые еще не были зафиксированы.

Часто для правильной очистки репозитория требуется полный сброс. Однако, если вы хотите, вы можете «спрятать» свои изменения, которые примут все незафиксированные изменения и сохранят их локально. Вы можете открыть тайник с помощью «применить тайник» позже.

git stash
git stash apply

Вы также можете создать новую ветку, зафиксировать изменения, а затем вернуться к мастеру. Это сохранит ваши изменения в истории коммитов навсегда, а также может быть отправлено в удаленный контроль версий, чтобы поделиться с вашими коллегами.

Выполнение сброса (Git Reset)

Во-первых, вам нужно будет получить последнее состояние удаленного репозитория, обычно «исходного», а затем проверить основную ветку (или ту, на которую вы сбрасываете).

git fetch origin
git checkout master

Вы также можете проверить и восстановить отдельный коммит, используя его идентификатор, например, git checkout 342c47a4.

Затем выполните полный сброс (если вы не хотите сохранить изменения с помощью мягкого сброса). Имейте в виду, что эта операция удаляет любые несохраненные изменения.

git reset --hard origin/master

Вы можете сбросить локальную фиксацию вместо origin/master, но в большинстве случаев вы будете сбрасываться в состояние удаленного.

Сброс неотслеживаемых файлов (Git Clean)

Однако git reset обычно недостаточно. Сброс в Git сбрасывает только те файлы, которые фактически отслеживаются Git. Это включает в себя код и ресурсы, которые получают изменения.

Однако существуют также такие файлы, как пакеты, локальная конфигурация, артефакты/вывод сборки, файлы журналов и другие временные элементы, которые не хранятся в репозитории Git (и игнорируются в .gitignore). Чтобы очистить их и довести локальное репо до 100% соответствия состоянию удаленного, вы можете запустить git clean:

git clean -d --force

На самом деле вы можете запустить эту команду без запуска git reset, что может оказаться именно тем, что вам нужно. Если вы не хотите воздействовать на свои файлы кода, но хотите очистить свои сборки, журналы и пакеты, чтобы начать заново, git clean может быть все, что вам нужно.

Вместо этого отказаться: клонирование нового репо

Хотя приведенное выше является «чистым способом» сделать это с помощью официальных команд Git, выполнение полного сброса не так уж далеко от простого уничтожения папки локального репозитория и клонирования совершенно нового. В этом нет ничего постыдного, если вы все равно планируете все сбросить:

sudo rm -r git-repository
git clone https://github.com/user/git-repository.git
cd git-repository

Имейте в виду, что это может сбросить только состояние вашего удаленного репозитория, а не локальную фиксацию. Это по умолчанию клонирует главную ветку, но вы можете переключиться на ветку по вашему выбору с помощью git switch или клонировать ее с самого начала с помощью git clone -b .