git stash застосувати версію


513

У мене є 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

Як я можу застосувати певну скриньку?


26
Зауважте, що у вас зараз (Q4 2016, Git 2.11) синтаксис git stash apply 0(замість git stash apply stash@{0}). Дивіться мою відповідь тут .
VonC

Відповіді:


837

Клавіші скриньки - це фактично stash@{n}ліворуч. Тому спробуйте:

git stash apply stash@{0}

(зауважте, що в деяких оболонках вам потрібно навести цитати "stash@{0}", наприклад zsh, fish та powerhell).

Оскільки версія 2.11, це досить просто, ви можете використовувати номер N стека замість stash@{n}. Тож тепер замість використання:

git stash apply "stash@{n}"

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

git stash apply n

Щоб отримати список скриньки:

git stash list

Насправді stash@{0}це перегляд у git, на який можна переключитися ..., але git stash apply ...слід з’ясувати, як DTRT застосувати його до поточного місця розташування.


90
Лише зауважте, що на деяких оболонках слід вказати приховування @ {n}.
Сеньяй

7
Ще одна порада: ви можете зробити, наприклад, gitk stash@{0}показати зміни, які ви внесли в певний скриньку.
antinome

11
Користувачам zsh потрібно подвоїти цитати, наприкладgit stash apply "stash@{0}"
mynameistechno

7
stash@{n}- це найзручніша команда набрати. Чи є якісь комбінації клавіш для цього, крім створення власного псевдоніма чи функції?
Ділантхепігуй

2
git stash apply nмирний
Віктор

241

Щоб застосувати копію та видалити її зі списку сховища, запустіть:

git stash pop stash@{n}

Щоб застосувати скриньку і зберегти її в кеш-пам'яті, запустіть:

git stash apply stash@{n}

8
Це чудово, дякую за розмежування двох варіантів. Я щойно спробував це, і, здається, що якщо ви вставите скриньку з гілки-a на гілку-b, сховище все одно залишиться в кеш-пам'яті. Я думаю, це було б так, ви все ще маєте можливість поп / застосувати скриньку до філії-a на майбутню дату. Дуже сподіваюся, що це мало сенс. Зручно!
longda

42
Для PowerShell:git stash pop "stash@{n}"
ankitjaininfo

1
PowerShell задоволений просто фігурними дужками в котируваннях / одинарних лапках:git stash apply stash@"{n}"
m1kael

PowerShell також прийме git stash apply stash@`{n`}(зверніть увагу на задній план перед дужками).
Ян Кемп

52

Оскільки версія 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 застосовувати 4" як коротке слово для "git stash застосовувати приховування @ {4}"

git stash apply "використовується для відмови від роботи, якщо в робочому дереві були якісь зміни, навіть коли зміна не збігалася зі зміною записаної скриньки


41

Якщо він знаходиться на машині Windows і в PowerShell, потрібно навести такі аргументи, як:

git stash apply "stash@{0}"

... або застосувати зміни та видалити з папки:

git stash pop "stash@{0}"

Інакше без лапок ви можете отримати цю помилку:

fatal: неоднозначний аргумент 'stash @': невідома редакція або шлях не в робочому дереві.


Мабуть, саме так потрібно робити і під час використання рибної оболонки на Mac OSX 10.11.
lps

8
git stash list

потім виберіть скриньку, щоб застосувати та використовувати лише номер:

git stash apply 1

2
Git Stash list 

У списку будуть показані всі приховані елементи, наприклад: stash @ {0} :, stash @ {1}:, .., stash @ {n}:

Потім виберіть число n, яке позначає приховування @ {n}:

git stash apply n 

for eg: git stash apply 1 will apply that particular stashed changes to the current branch
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.