Я спрятал свои изменения. Теперь я хочу разблокировать только некоторые файлы из кошелька. Как я могу это сделать?
Как разблокировать только определенные файлы?
Ответ 1
Как упомянуто ниже и подробно описано в разделе " Как извлечь отдельный файл (или изменения в файл) из git stash? ", Вы можете применить git checkout
или git show
для восстановления определенного файла.
git checkout [email protected]{0} -- <filename>
(Как прокомментировал Jaime M., для некоторых оболочек, таких как tcsh, где вам нужно экранировать специальные символы, синтаксис будет следующим: git checkout '[email protected]{0}' -- <filename>
)
или сохранить его под другим именем файла:
git show [email protected]{0}:<full filename> > <newfile>
(обратите внимание, что здесь
<full filename>
- это полный путь к файлу относительно верхнего каталога проекта (подумайте: относительно[email protected]{0}
)).
Юсер предлагает в комментариях:
Если вы хотите вручную выбрать, какие изменения вы хотите применить из этого файла:
git difftool [email protected]{0}..HEAD -- <filename>
Вивек добавляет в комментариях:
Похоже, "
git checkout [email protected]{0} -- <filename>
" восстанавливает версию файла на момент, когда был выполнен stash - он НЕ применяет (только) сохраненные изменения для этого файла.
Чтобы сделать последнее:
git diff [email protected]{0}^1 [email protected]{0} -- <filename> | git apply
(как прокомментировал peterflynn, вам может понадобиться | git apply -p1
в некоторых случаях, удаляя один (p1
) ведущий слеш из традиционных путей различий)
Как прокомментировал: "unstash" (git stash pop
), то:
- добавить то, что вы хотите сохранить в индексе (
git add
) - спрятать остальное:
git stash --keep-index
Последний пункт - это то, что позволяет вам сохранять некоторые файлы, в то время как другие хранятся.
Это проиллюстрировано в разделе " Как сохранить только один файл из нескольких файлов, которые были изменены ".
Ответ 2
git checkout [email protected]{N} <File(s)/Folder(s) path>
Eg. Чтобы восстановить только файл. /test.c и./include из последнего спрятанного файла,
git checkout [email protected]{0} ./test.c ./include
Ответ 3
Я думаю, что ответ VonC, вероятно, вы хотите, но вот способ сделать выборочный "git apply":
git show [email protected]{0}:MyFile.txt > MyFile.txt
Ответ 4
Если вы git stash pop
(без конфликтов), он удалит тайник после его применения. Но если вы git stash apply
, он применит патч, не удаляя его из списка. Затем вы можете вернуть нежелательные изменения с помощью git checkout -- files...
Ответ 5
Сначала перечислите все тайники
git stash list
↓
[email protected]{0}: WIP on Produktkonfigurator: 132c06a5 Cursor bei glyphicon plus und close zu zeigende Hand ändern
[email protected]{1}: WIP on Produktkonfigurator: 132c06a5 Cursor bei glyphicon plus und close zu zeigende Hand ändern
[email protected]{2}: WIP on master: 7e450c81 Merge branch 'Offlineseite'
Затем покажите, какие файлы находятся в тайнике (давайте выберем тайник 1):
git stash show 1 --name-only
//Hint: you can also write
//git stash show [email protected]{1} --name-only
↓
ajax/product.php
ajax/productPrice.php
errors/Company/js/offlineMain.phtml
errors/Company/mage.php
errors/Company/page.phtml
js/konfigurator/konfigurator.js
Затем примените файл, который вам нравится:
git checkout [email protected]{1} -- <filename>
или вся папка:
git checkout [email protected]{1} /errors
Это также работает без --
но рекомендуется использовать их. Смотрите этот пост.
Также принято распознавать двойной дефис как сигнал, чтобы прекратить интерпретацию опций и рассматривать все последующие аргументы буквально.
Ответ 6
Еще один способ:
git diff [email protected]{N}^! -- path/to/file1 path/to/file2 | git apply -R
Ответ 7
Я использовал этот
git rm --cached your/path/to/file
Ответ 8
Для пользователей Windows: фигурные скобки имеют особое значение в PowerShell. Вы можете либо заключить в одинарные кавычки, либо убежать с помощью backtick. Например:
git checkout '[email protected]{0}' YourFile
Без этого вы можете получить сообщение об ошибке:
Unknown switch 'e'