К сожалению, ваши незафиксированные изменения в файле будут потеряны, если я правильно понимаю вашу ситуацию.
Команда git checkout -- [file]
возвращает все незафиксированные изменения, внесенные в файл.Он меняет свою версию на версию последнего коммита в текущей ветви.
Вы говорите, что больше не видите файл.Если файл не существует в последнем коммите вашей ветки, это странно (и вы должны прочитать этот ответ ).Но если вы уверены, что он существует в удаленной ветви, есть способ вернуть его:
git checkout HEAD -- [file]
Это сбрасывает версию файла и его состояние в индексе.
Предотвращение этого в будущем
Итак, у вас есть некоторые изменения в файлах, но вы хотите применить их в другой ветви или коммите, прежде чем делать коммит.Для этого вы можете использовать [git stash][1]
.Как сказано в документации:
Используйте git stash, когда вы хотите записать текущее состояние рабочего каталога и индекса, но хотите вернуться в чистый рабочий каталог.
В вашем случае это будет означать:
- Внести изменения в файлы
- Добавить файлы:
git add [your-files-or-parameter]
- Сохранить файлы:
git stash
- Переключиться на ветвь объекта:
git checkout [feature-branch]
- Применить ваши спрятанные изменения:
git stash apply
Теперь ваши изменения применяются поверх состояния ветви объекта.
Обратите внимание, что git stash apply
оставляет запись тайника в индексе хранения, что означает, что после его применения она все еще хранится там.Вы можете использовать git stash pop
для применения и удаления тайника, но я считаю полезным, чтобы вы могли сбросить и повторить переключение без потери изменений, если что-то пойдет не так.