Как полностью сбросить репозиторий 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
.