Чтобы вернуть один файл из 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 нетронутым и ограничит операцию восстановления только указанным вами путем.

Источники