Git Применить версию приложения

У меня есть 2 ветки: мастер | дизайн

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

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

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

[email protected]{0}: WIP on design: f2c0c72... Adjust Password Recover Email
[email protected]{1}: WIP on design: f2c0c72... Adjust Password Recover Email
[email protected]{2}: WIP on design: eb65635... Email Adjust
[email protected]{3}: WIP on design: eb65635... Email Adjust

Если я попробую git stash apply f2c0c72 я git stash apply f2c0c72 сообщение об ошибке:

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

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

Ответ 1

Ключи от тайника на самом деле являются элементами [email protected]{n} тайника слева. Так что постарайтесь:

git stash apply [email protected]{0}

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

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

git stash apply "[email protected]{n}"

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

git stash apply n

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

git stash list

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

Ответ 2

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

git stash pop [email protected]{n}

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

git stash apply [email protected]{n}

Ответ 3

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

git stash apply "[email protected]{n}"

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

git stash apply n

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

[email protected]{0}: WIP on design: f2c0c72... Adjust Password Recover Email
[email protected]{1}: WIP on design: f2c0c72... Adjust Password Recover Email
[email protected]{2}: WIP on design: eb65635... Email Adjust
[email protected]{3}: WIP on design: eb65635... Email Adjust

Если вы хотите применить [email protected]{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 "раньше отказывался работать, если в рабочем дереве были какие-либо изменения, даже если изменение не перекрывалось с записанным изменением тайника

Ответ 4

Если вы находитесь на машине Windows и в PowerShell, нужно указать аргумент, например:

git stash apply "[email protected]{0}"

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

git stash pop "[email protected]{0}"

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

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

Ответ 5

git stash apply n

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

git stash apply 1

Ответ 6

Git Stash list 

В списке будут показаны все спрятанные элементы, например: stash @{0} :, stash @{1}:,.., stash @{n}:

Затем выберите число n, которое обозначает stash @{n}:

git stash apply n 

for eg: git stash apply 1 will apply that particular stashed changes to the current branch