На странице git stash вы можете прочитать это (в разделе "Обсуждение", сразу после описания "Опции"):
Тайник представляется как коммит, дерево которого записывает состояние
рабочий каталог, и его первым родителем является коммит в HEAD, когда
заначка была создана.
Таким образом, вы можете рассматривать stash (например, stash@{0}
- это первый / самый верхний тайник) как коммит слияния и использовать:
$ git diff stash@{0}^1 stash@{0} -- <filename>
Объяснение: stash@{0}^1
ярлык означает первого родителя данного тайника, который, как указано в объяснении выше, является коммитом, при котором изменения были спрятаны. Мы используем эту форму "git diff" (с двумя коммитами), потому что stash@{0}
/ refs/stash
является коммитом слияния, и мы должны указать git, против какого родителя мы хотим использовать diff. Более загадочный:
$ git diff stash@{0}^! -- <filename>
также должен работать (см. Справочную страницу rev^!
в разделе «Задание диапазонов» для справки git rev-parse ).
Аналогично, вы можете использовать git checkout , чтобы проверить один файл из тайника:
$ git checkout stash@{0} -- <filename>
или сохранить его под другим именем:
$ git show stash@{0}:<full filename> > <newfile>
или
$ git show stash@{0}:./<relative filename> > <newfile>
( примечание , что здесь <полное имя файла> - это полный путь к файлу относительно верхнего каталога проекта (думаю: относительно stash@{0}
)).
Возможно, вам потребуется защитить stash@{0}
от расширения оболочки, т. Е. Использовать "stash@{0}"
или 'stash@{0}'
.