Как разблокировать только определенные файлы?

Я спрятал свои изменения. Теперь я хочу разблокировать только некоторые файлы из кошелька. Как я могу это сделать?

Ответы

Ответ 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'