Оскільки git в основному полягає в управлінні усім вмістом та індексом сховища (а не одним або кількома файлами) git stash, не дивно,з усім робочим каталогом.
Насправді, оскільки Git 2.13 (Q2 2017), ви можете зберігати окремі файли, використовуючи git stash push:
git stash push [--] [<pathspec>...]
Коли pathspecзадано ' git stash push', новий сховище записує змінені стани лише для файлів, які відповідають шляху проспекту. Докладніше див. У статті " Сховання змін до конкретних файлів ".
Спрощений приклад:
git stash push path/to/file
У тестовому випадку для цієї функції вимкнено ще кілька варіантів:
test_expect_success 'stash with multiple pathspec arguments' '
>foo &&
>bar &&
>extra &&
git add foo bar extra &&
git stash push -- foo bar &&
test_path_is_missing bar &&
test_path_is_missing foo &&
test_path_is_file extra &&
git stash pop &&
test_path_is_file foo &&
test_path_is_file bar &&
test_path_is_file extra
Оригінальна відповідь (нижче, червень 2010 р.) Стосувалася вибору вручну того, що потрібно зберігати.
Коментарі Casebash :
Це ( stash --patchоригінальне рішення) приємно, але часто я змінював багато файлів, тому використання патча дратує
bukzor «s відповідь (upvoted, листопад 2011) пропонує більш практичне рішення, засноване на
git add+git stash --keep-index .
Іди подивись та підтверди його відповідь, яка повинна бути офіційною (замість моєї).
Щодо цього варіанту, chhh вказує альтернативний робочий процес у коментарях:
вам слід " git reset --soft" після такої скринінгу, щоб отримати чіткий показ сценарію:
Для того, щоб дійти до початкового стану - це чітка область постановки та лише з деякими вибраними нестадійними модифікаціями, можна м'яко скинути індекс, щоб отримати (без вчинив щось подібне до вас - букзор - зробив).
(Оригінальна відповідь червень 2010 року: приховування вручну)
Тим git stash save --patchне менш, може дозволити вам досягти часткового перегляду, який ви шукаєте:
За допомогою цього --patchви можете інтерактивно вибирати луки в різниці між ГОЛОВОЮ та робочим деревом, яке потрібно приховати.
Запис у сховищі побудований таким чином, що його стан індексу такий самий, як стан індексу вашого сховища, а його робоче дерево містить лише ті зміни, які ви вибрали інтерактивно. Вибрані зміни потім повертаються з робочого дерева.
Однак це збереже повний індекс (який може бути не тим, що ви хочете, оскільки він може включати інші файли, вже індексовані), і часткове робоче дерево (яке може виглядати як той, який ви хочете зберігати).
git stash --patch --no-keep-index
може бути більш підходящим.
Якщо --patchне працює, ручний процес може:
Для одного або декількох файлів проміжним рішенням буде:
- скопіюйте їх поза Git repo
(насправді, eleotlecram пропонує цікаву альтернативу )
git stash
- скопіюйте їх назад
git stash # цього часу зберігаються лише потрібні файли
git stash pop stash@{1} # повторно застосувати всі свої модифікації файлів
git checkout -- afile # скиньте файл до вмісту HEAD перед будь-якими локальними модифікаціями
В кінці цього досить громіздкого процесу у вас буде збережено лише один або кілька файлів.
git stash --keep-indexвін зберігає індекс, але він приховує все - і в індексі, і в зовнішньому.