Поскольку 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
вы можете в интерактивном режиме выбирать фрагменты в разнице между HEAD и рабочим деревом, которое нужно спрятать.
Запись stash составлена таким образом, что ее индексное состояние совпадает с индексным состоянием вашего репозитория, а его рабочее дерево содержит только изменения, выбранные вами в интерактивном режиме. Выбранные изменения затем откатываются с вашего рабочего дерева.
Однако это сохранит полный индекс (который может быть не тем, что вы хотите, поскольку он может включать другие уже проиндексированные файлы), а также частичное рабочее дерево (которое может выглядеть как тот, который вы хотите сохранить).
git stash --patch --no-keep-index
может быть лучше.
Если --patch
не работает, ручной процесс может:
Для одного или нескольких файлов промежуточным решением будет:
- скопируйте их вне репозитория Git
(на самом деле, eleotlecram предлагает интересную альтернативу )
git stash
- скопировать их обратно
git stash
# на этот раз спрятаны только те файлы, которые вы хотите
git stash pop stash@{1}
# повторно применить все ваши модификации файлов
git checkout -- afile
# сбросить файл до содержимого HEAD перед любыми локальными изменениями
В конце этого довольно громоздкого процесса у вас будет спрятан только один или несколько файлов.
git stash --keep-index
сохраняет индекс, но он хранит все - и в индексе, и вне его.