Чтобы вернуть один файл из stash в macOS, используйте git restore, указав stash в качестве источника, а путь к файлу — в качестве цели. Это восстановит данный файл в вашем рабочем каталоге, сохранив при этом запись в stash. Сначала определите нужный stash и просмотрите его изменения; затем восстановите конкретный путь и проверьте результат.
1. Откройте Терминал в репозитории
Откройте Терминал через Spotlight или из папки «Программы/Утилиты» в Finder, затем перейдите в каталог репозитория с помощью команды cd. Например, введите cd , перетащите папку проекта в окно Терминала, чтобы вставить путь к ней, и нажмите Return. Apple описывает Терминал как интерфейс командной строки macOS; оболочкой по умолчанию является zsh, хотя администратор или пользователь может настроить другую оболочку. Открытие и закрытие Терминала на Mac
Перед восстановлением убедитесь, что вы находитесь в нужном репозитории, и проверьте локальные изменения:
git status --short
Восстановление из stash может перезаписать текущее содержимое целевого файла в рабочем каталоге, поэтому сохраните или закоммитьте любые правки в этом файле, которые вам необходимо оставить. Эта операция применяется выборочно по пути к файлу, но она не является слиянием или резервной копией для безопасности.
2. Найдите и проверьте stash
Выведите список доступных записей:
git stash list
Git обозначает самую свежую запись как stash@{0}, следующую — как stash@{1} и так далее. Выберите запись, содержащую нужную вам версию. Если описания не дают ясной картины, просмотрите изменения кандидата в виде патча:
git stash show --patch 'stash@{0}'
Замените stash@{0} на определенную вами запись. Заключение ссылки в кавычки полезно в zsh, так как фигурные скобки имеют специальное значение в синтаксисе этой оболочки. В документации Git команда stash show предназначена для проверки содержимого stash, а stash apply — для применения всей записи целиком; приведенная ниже команда вместо этого выбирает из снимка stash только один путь. Документация по git-stash
3. Восстановите только нужный файл
Выполните git restore, указав ссылку на stash в качестве источника и путь относительно корня репозитория после --:
git restore --source='stash@{0}' -- 'src/config.json'
Замените src/config.json на точный путь, который вам нужен, используя прямые слэши и указывая его относительно корня репозитория. Кавычки также предотвращают интерпретацию оболочкой пробелов и подстановочных знаков. Опция --source выбирает коммит или дерево в качестве источника содержимого; спецификатор пути (pathspec) ограничивает восстанавливаемый Git путь. Поскольку параметр --staged опущен, Git восстанавливает рабочий каталог и не затрагивает индекс. Документация по git-restore
Теперь проверьте изменения:
git status --short
git diff -- 'src/config.json'
В обычном случае восстановленная версия представляет собой непроиндексированное изменение рабочего дерева по отношению к индексу. Если ранее файл был добавлен в индекс, внимательно сравните версии в рабочем каталоге и в индексе, прежде чем индексировать или коммитить. Запись stash остается в списке stash-записей, поскольку git restore считывает данные из нее, не применяя и не удаляя запись целиком.
Когда этот процесс требует корректировки
Путь должен существовать в снимке рабочего дерева stash. Если это не так, Git может сообщить, что pathspec не совпал ни с одним файлом; проверьте патч и имя файла, включая регистр букв. Отслеживаемый путь, отсутствующий в исходном дереве, может быть удален, чтобы привести цель в соответствие с этим деревом, поэтому будьте особенно осторожны, если stash содержит запись об удалении. Такое поведение описано в документации по git-restore. Документация по git-restore
Этот рецепт предназначен для файла, представленного в отслеживаемом снимке рабочего каталога stash. Записи stash, созданные с флагами -u или -a, могут также содержать неотслеживаемые или игнорируемые файлы, хранящиеся отдельно; команда git restore --source='stash@{0}' не обращается к этому отдельному снимку как к основному дереву stash. Внимательно проверяйте такие записи и используйте описанные в документации Git средства проверки и восстановления stash, вместо того чтобы рассчитывать, что эта команда извлечет их. Документация по git-stash
Если ваша цель — применить отдельные строки, а не весь файл целиком, команда git restore -p предлагает интерактивный выбор фрагментов (hunk selection), однако перед использованием уточните ее поведение и источник для вашей версии Git. Чтобы восстановить как проиндексированную версию файла, так и версию в рабочем каталоге, git restore поддерживает одновременное указание --staged и --worktree; это изменит также и индекс, поэтому используйте данный вариант, только если это действительно необходимо. Документация по git-restore
Практическая последовательность действий такова: найдите нужный stash, подтвердите наличие файла в его содержимом, восстановите один путь относительно репозитория из выбранного stash и просмотрите diff перед продолжением. Это позволит сохранить stash нетронутым и ограничит операцию восстановления только указанным вами путем.
Источники
Открытие и закрытие Терминала на Mac — Служба поддержки Apple