#Как проявляется ошибка и когда применим способ
Git отказывается перейти на другую ветку, если её файлы конфликтуют с локальными незакоммиченными изменениями. Защита предотвращает их потерю. Правильный путь зависит от того, нужно ли сохранить правки в текущей ветке, перенести их в другую ветку или временно отложить.
#Причины и признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Изменён отслеживаемый файлТа же строка или файл имеет другое содержимое в целевой ветке. | git switch сообщает, что локальные изменения будут перезаписаны. | Сохранить изменения коммитом либо stash. |
| Неотслеживаемый файл мешает переключениюВ новой ветке Git должен записать файл с таким же именем. | В ошибке указаны untracked working tree files. | Сохранить неотслеживаемые файлы отдельно или через stash -u. |
#Пошаговая диагностика и решение
- 1. Узнайте текущую ветку и список измененийОткройте терминал Git Bash, PowerShell или обычную оболочку в папке репозитория. Выполните команды ниже; убедитесь, что показан нужный проект. Если git status говорит not a git repository, перейдите в папку с .git, а не выполняйте операции в другом проекте.
- Только чтение; показывает ветку, отслеживаемые и неотслеживаемые измененияLinux · Терминал (Bash)КомандаТолько чтение; показывает ветку, отслеживаемые и неотслеживаемые изменения.
git branch --show-currentgit status --short
- 2. Сохраните внешний резерв важных файловСкопируйте несохранённые документы и конфигурацию в папку вне репозитория. Особенно важно сохранить файлы, ещё не добавленные в Git, и секреты из .env. Команды git switch --force или git reset --hard могут уничтожить локальные правки, поэтому не пользуйтесь ими.
- 3. Посмотрите, что изменилосьВыполните git diff для обычных правок и git diff --cached для уже подготовленных к коммиту изменений. Прочитайте вывод: если нужны только несколько файлов, запишите их названия для отдельного сохранения. Не добавляйте в Git пароли или временные файлы.
- Просмотр изменений, ничего не записываетсяLinux · Терминал (Bash)КомандаПросмотр изменений, ничего не записывается.
git diffgit diff --cached
- 4. Выберите сохранение в своей веткеЕсли правки завершены и относятся к текущей ветке, внесите в индекс только выбранные файлы через git add -- ПУТЬ_К_ФАЙЛУ, проверьте git diff --cached и создайте коммит. После этого переключайтесь. Не используйте git add . без проверки, чтобы не закоммитить секреты.
- 5. Либо временно уберите изменения в stashЕсли коммит делать рано, запустите git stash push -u -m с понятной пометкой. Параметр -u включает неотслеживаемые файлы, но НЕ включает игнорируемые. Убедитесь, что stash записан, а рабочее дерево чистое; если есть важные ignored-файлы, храните их во внешней копии.
- Дополнительная команда по темеLinux · Терминал (Bash)С осторожностьюИзменяет состояние рабочего каталога, сохраняя правки во временной записи; не трогает ignored-файлы.
git stash push -u -m "Перед переключением ветки"git stash listgit status --shortКоманда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.
- 6. Переключитесь на назначенную веткуУбедитесь через git branch --list, что ветка действительно существует локально; затем выполните git switch ИМЯ_ВЕТКИ. Если сообщение повторилось, посмотрите названия оставшихся файлов. Не используйте --discard-changes: он отбрасывает правки.
- Замените имя существующей ветки; операция изменяет набор файлов на дискеLinux · Терминал (Bash)С осторожностьюЗамените имя существующей ветки; операция изменяет набор файлов на диске.
git switch ИМЯ_ВЕТКИКоманда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.
- 7. Верните необходимые правки и проверьтеЕсли перенос правок нужен именно в новую ветку, просмотрите git stash show --stat, затем используйте git stash apply, который не удаляет сохранённую запись. После применения проверьте git status и diff. При конфликте остановитесь и разрешите его вручную; stash остаётся доступным для повторной проверки.
- Применяет последний stash; возможны конфликты файлов; запись остаётся до явного удаленияLinux · Терминал (Bash)С осторожностьюПрименяет последний stash; возможны конфликты файлов; запись остаётся до явного удаления.
git stash applygit status --shortКоманда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.
#Проверка результата и действия при повторении
Успех: git branch --show-current показывает выбранную ветку, сохранённые правки присутствуют там, где планировалось, и git status не содержит неожиданных потерь. Если появились конфликты, восстановите копию отдельных файлов, проверьте stash list и разберите каждый конфликт; не очищайте stash автоматически.
Если на указанном шаге результат отличается, остановитесь и запишите первое полное сообщение об ошибке, версию инструментов и проверенное состояние до исправления. Не переходите к опасным действиям на действующем проекте: повторите проверку на отдельной копии, верните сохранённые файлы и только затем выбирайте следующую причину.