Оскільки 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
він зберігає індекс, але він приховує все - і в індексі, і в зовнішньому.