Поскольку git по сути относится к управлению всем репозиторием контентом и индексом (а не одним или несколькими файлами), git stash
, что неудивительно, работает со всем рабочим каталогом .
На самом деле, начиная с Git 2.13 (второй квартал 2017 года), вы можете хранить отдельные файлы, используя git stash push
:
git stash push [--] [<pathspec>...]
Когда pathspec
присваивается 'git stash push
', новый тайник записывает измененные состояния только для файлов, которые соответствуют пути
Подробнее см. " Хранение изменений в определенных файлах ".
Контрольный пример не требует пояснений:
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
) хорошо, но часто я модифицировал много файлов, поэтому использование патча раздражает
букзор * ответ (одобрено, ноябрь 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 перед любыми локальными изменениями
В конце этого довольно громоздкого процесса у вас будет спрятан только один или несколько файлов.