Я приховав свої зміни. Тепер я хочу видалити лише копію файлів із сховища. Як я можу це зробити?
Я приховав свої зміни. Тепер я хочу видалити лише копію файлів із сховища. Як я можу це зробити?
Відповіді:
Як було зазначено нижче , і детально в розділі " Як я витягнути один файл (або зміни до файлу) з сховища git? ", Ви можете застосувати використання git checkout
або git show
відновити певний файл.
git checkout stash@{0} -- <filename>
Це перезаписує filename
: переконайтеся, що у вас не було місцевих модифікацій, або ви можете замість цього злити збережений файл .
(Як зауважив по Jaime М. , для певної оболонки , як Tcsh , де вам потрібно , щоб уникнути спеціальних символів, синтаксис буде: git checkout 'stash@{0}' -- <filename>
)
або зберегти його під іншим іменем файлу:
git show stash@{0}:<full filename> > <newfile>
(зауважте, що тут
<full filename>
повне ім'я файлу щодо верхнього каталогу проекту (думаю: відносноstash@{0}
)).
Юсер пропонує в коментарях :
Якщо ви хочете вибрати вручну, які зміни потрібно застосувати з цього файлу:
git difftool stash@{0}..HEAD -- <filename>
Vivek додає в коментарях :
Схоже, "
git checkout stash@{0} -- <filename>
" відновлює версію файлу станом на час виконання скрипту - він НЕ застосовує (лише) сховані зміни для цього файлу.
Щоб зробити останнє:
git diff stash@{0}^1 stash@{0} -- <filename> | git apply
(Як зауважив по peterflynn , що вам може знадобитися | git apply -p1
в деяких випадках, видалення одного ( p1
) , провідний слеш від традиційних шляхів дифф)
Як коментується: "зніміть" ( git stash pop
), тоді:
git add
)git stash --keep-index
Останній пункт - це те, що дозволяє зберігати одні файли, зберігаючи інші.
Це проілюстровано у розділі " Як зберігати лише один файл із кількох файлів, що змінилися ".
git stash pop
через конфлікти файлів. У цьому випадку відповідь Баламуругана А зробила для мене хитрість.
unstash
означає pop
, як мені здається, що це, мабуть, у більшості випадків, це лише частково відповідає на питання. Як потім вийняти вибірково нанесені фрагменти зі сховища, щоб уникнути пізніших конфліктів та / або плутанини під час появи інших змін?
git checkout stash@{N} <File(s)/Folder(s) path>
Напр. Щоб відновити лише файл ./test.c та папку ./include з останньої скриньки,
git checkout stash@{0} ./test.c ./include
-a
прапор під час створення скриньки.
Я думаю, що відповідь VonC - це, мабуть, те, що ти хочеш, але ось спосіб зробити вибіркове "git apply":
git show stash@{0}:MyFile.txt > MyFile.txt
checkout
.
git show stash@`{0`}:Path/To/MyFile.txt |sc Path/To/MyFile.txt
- backticks необхідний для PS, щоб не інтерпретувати дужки спеціально, і sc
це необхідно, оскільки >
оператор PS за замовчуванням UTF-16 (фактично UCS-2), що, мабуть, не те, що ви хочете. Відповідь @Balamurugan A не страждає від цих питань.
Спочатку перерахуйте всі стаси
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'
Потім покажіть, які файли містяться в сховці (давайте вибрати сховище 1):
git stash show 1 --name-only
//Hint: you can also write
//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 stash pop
призвела до помилки для відслідковуваних файлів. Дякую тобі.
Якщо ви git stash pop
(без конфліктів), він видалить сховище після його застосування. Але якщо ви, git stash apply
то застосуєте виправлення, не видаляючи його із списку скриньки. Тоді ви можете відновити небажані зміни за допомогоюgit checkout -- files...
git stash pop
і там є конфлікти, вам доведеться їх виправити вручну, і приховування НЕ буде видалено.
Ще один спосіб:
git diff stash@{N}^! -- path/to/file1 path/to/file2 | git apply -R
checkout
або show
сліпо перезаписуючи файл, замість того, щоб просто застосовувати зміни. "Ще один спосіб" - заниження.
path/to/file2
так, як ви хочете відрізнятись від того самого файлу у вашій робочій області. Вийти з другого шляху для мене добре працює. - І я отримую повідомлення про помилку, використовуючи -R
параметр ("застосувати патч у зворотному порядку", намагаючись проклеїти приховану версію ?!). Так виглядає моя робоча версія git diff stash@{N}^! -- path/to/file | git apply -
.
...| git apply -3 -
Для користувачів Windows: фігурні брекети мають особливе значення в PowerShell. Можна або оточити окремими цитатами, або втекти за допомогою зворотного вибору. Наприклад:
git checkout 'stash@{0}' YourFile
Без цього ви можете отримати помилку:
Unknown switch 'e'