git stash применить версию - PullRequest
       16

git stash применить версию

396 голосов
/ 15 декабря 2009

у меня 2 филиала: мастер | дизайн

Работая в дизайне, я сделал тайник и переключился на мастера, внёс некоторые коррективы. Вернулся к дизайну и сделал stash apply только чтобы потерять все мои изменения в ветке дизайна.

Я надеюсь, что все мои работы находятся в тайнике, так как я не очистил и не удалил их.

Если я создаю тайник, я получаю 4 результата:

stash@{0}: WIP on design: f2c0c72... Adjust Password Recover Email
stash@{1}: WIP on design: f2c0c72... Adjust Password Recover Email
stash@{2}: WIP on design: eb65635... Email Adjust
stash@{3}: WIP on design: eb65635... Email Adjust

Если я попытаюсь git stash apply f2c0c72 Я получу ошибку:

fatal: Needed a single revision
f2c0c72: no valid stashed state found

Как я могу применить определенный тайник?

Ответы [ 5 ]

626 голосов
/ 15 декабря 2009

Ключи от тайника на самом деле являются stash@{n} пунктами слева. Так что попробуйте:

git stash apply stash@{0}

(обратите внимание, что в некоторых оболочках нужно указывать "stash@{0}", например, zsh, fish и powershell).

Начиная с версии 2.11, это довольно просто, вы можете использовать номер стека N вместо stash@{n}. Так что теперь вместо использования:

git stash apply "stash@{n}"

Вы можете ввести:

git stash apply n

Чтобы получить список тайников:

git stash list

На самом деле stash@{0} - это ревизия в git, на которую вы можете переключиться ... но git stash apply ... должен выяснить, как DTRT применить ее к вашему текущему местоположению.

220 голосов
/ 15 декабря 2009

Чтобы применить тайник и удалить его из списка, запустите:

git stash pop stash@{n}

Чтобы применить тайник и сохранить его в кэше, запустите:

git stash apply stash@{n}
42 голосов
/ 09 июня 2017

Начиная с версии 2.11, это довольно просто, вы можете использовать номер стека N вместо того, чтобы произносить "stash@{n}". Так что теперь вместо использования:

git stash apply "stash@{n}"

Вы можете ввести:

git stash apply n

Например, в вашем списке:

stash@{0}: WIP on design: f2c0c72... Adjust Password Recover Email
stash@{1}: WIP on design: f2c0c72... Adjust Password Recover Email
stash@{2}: WIP on design: eb65635... Email Adjust
stash@{3}: WIP on design: eb65635... Email Adjust

Если вы хотите применить stash@{1}, вы можете набрать:

git stash apply 1

В противном случае вы можете использовать его, даже если у вас есть какие-то изменения в вашем каталоге, начиная с 1.7.5.1, но вы должны быть уверены, что тайник не перезапишет изменения вашего рабочего каталога, если это произойдет, вы получите ошибку:

error: Your local changes to the following files would be overwritten by merge:
        file
Please commit your changes or stash them before you merge.

В версиях, предшествующих 1.7.5.1, он отказывался работать, если в рабочем каталоге произошли изменения.


Примечания к выпуску Git:

Пользователь всегда должен произносить «stash @ {$ N}» при именовании одного элемента. в расположении по умолчанию для хранилища, то есть повторно ставит отметки в refs / stash. команда "git stash" научилась принимать "git stash apply 4" как сокращение для "git stash apply stash @ {4}"

git stash apply "раньше отказывался работать, если в рабочее дерево, даже если изменение не перекрывалось с изменением Копить записано

40 голосов
/ 16 октября 2015

Если кто-то находится на компьютере с Windows и в PowerShell, необходимо указать аргумент, такой как:

git stash apply "stash@{0}"

... или применить изменения и удалить из тайника:

git stash pop "stash@{0}"

В противном случае без кавычек вы можете получить эту ошибку:

fatal: неоднозначный аргумент 'stash @': неизвестная ревизия или путь не указан рабочее дерево.

2 голосов
/ 05 мая 2019
git stash apply n

затем выберите тайник для применения

git stash apply 1
...