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



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

641   6  

6 ответов:

как указанных ниже, и подробно изложенных в "как я могу извлечь один файл (или изменения в файл) из тайника git?", вы можете применять использовать git checkout или git show для восстановления определенного файла.

git checkout stash@{0} -- <filename>

(как прокомментировал by Джейме М., для некоторых оболочек, таких как tcsh, где вам нужно избежать специальных символов, синтаксис будет следующим: git checkout 'stash@{0}' -- <filename>)

или чтобы сохранить его под другим именем:

git show stash@{0}:<full filename>  >  <newfile>

(обратите внимание, что здесь <full filename> - полный путь к файлу относительно корневой директории проекта (думаю: относительно stash@{0})).

yucer предполагает в комментариях:

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

git difftool stash@{0}..HEAD -- <filename>

Вивек добавляет in комментарии:

выглядит как "git checkout stash@{0} -- <filename>" восстанавливает версию файла на момент выполнения тайника-это делает не применить (просто) спрятанные изменения для этого файла.
Чтобы сделать последнее:

git diff stash@{0}^1 stash@{0} -- <filename> | git apply

(как прокомментировал by peterflynn вам понадобится | git apply -p1 в некоторых случаях удаление одного (p1) ведущий Слэш от традиционного diff пути)


как прокомментировал: "unstash" (git stash pop), то:

  • добавить то, что вы хотите сохранить в индекс (git add)
  • притон остаток: git stash --keep-index

последний пункт-это то, что позволяет вам хранить некоторые файлы, сохраняя другие.
Это проиллюстрировано в "как спрятать только один файл из нескольких файлов, которые изменились".

git checkout stash@{N} <File(s)/Folder(s) path> 

например. Только для восстановления ./испытание.файл с и ./ включить папку из последнего тайника,

git checkout stash@{0} ./test.c ./include

Я думаю, что ответ VonC, вероятно, то, что вы хотите, но вот способ сделать выборочный "git apply":

git show stash@{0}:MyFile.txt > MyFile.txt

Если вы git stash pop (без конфликтов) он удалит тайник после его применения. Но если вы git stash apply он будет применять патч, не удаляя его из списка заначку. Затем вы можете отменить нежелательные изменения с git checkout -- files...

сначала перечислите все тайники

git stash list

stash@{0}: WIP on Produktkonfigurator: 132c06a5 Cursor bei glyphicon plus und close zu zeigende Hand ändern
stash@{1}: WIP on Produktkonfigurator: 132c06a5 Cursor bei glyphicon plus und close zu zeigende Hand ändern
stash@{2}: WIP on master: 7e450c81 Merge branch 'Offlineseite'

затем покажите, какие файлы находятся в тайнике:

git stash show stash@{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 stash@{1} -- <filename>

или всю папку:

git checkout stash@{1} /errors

он также работает без -- но рекомендуется использовать их. Смотрите этой пост.

также принято распознавать двойной дефис как сигнал к остановить интерпретацию параметров и обработать все следующие аргументы буквально.

еще один способ:

git diff stash@{N}^! -- path/to/file1 path/to/file2  | git apply -R

Comments

    Ничего не найдено.