Предположим, что в проект с версией git внесены два набора изменений. Один сет постановочный, другой - нет.
Я хочу перепроверить поэтапные изменения, запустив свой проект в этом состоянии (до фиксации). Каков простой способ убрать все неустановленные изменения и оставить только постановочные? Поэтому мне нужно, чтобы неустановленные изменения исчезли из моего проекта, но были где-то сохранены для дальнейшей работы.
Это очень похоже на git stash
команду. Но git stash
убрал бы как неустановленные, так и постановочные изменения из моего проекта. И я не могу найти что-то подобное git stash uncached
.
-k
вариант), либо неудобны в использовании.Ответы:
Обновление 2:
я не уверен, почему люди жалуются на этот ответ, похоже, он отлично работает со мной, для неотслеживаемых файлов вы можете добавить
-u
флагПолная команда становится
git stash --keep-index -u
А вот отрывок из
git-stash
справкиА вот гифка того, как это выглядит:
Обновить:
Несмотря на то, что это выбранный ответ, многие отметили, что [ответ ниже] (https://stackoverflow.com/a/34681302/292408) является правильным, я рекомендую проверить его.Я снова проверил свой ответ сегодня (31.01.2020) на версии git
2.24.0
, и я все еще считаю, что он правильный, я добавил небольшую заметку выше о неотслеживаемых файлах. Если вы считаете, что это не работает, укажите также свою версию git.Старый ответ :
если
--keep-index
опция используется, все изменения, уже добавленные в индекс, остаются без изменений:Из документации
git-stash
:Но, если вы просто хотите визуально проверить только поэтапные изменения, вы можете попробовать
difftool
:источник
git stash [-p|--patch]
что похоже на интерактивное хранение. Изman git stash
«С помощью --patch вы можете интерактивно выбирать блоки из разницы между HEAD и рабочим деревом, которые нужно сохранить».add -p
,checkout -p
не иreset -p
, не пробовалstash -p
, спасибо за совет: DПринятый ответ также содержит поэтапные изменения, как отметили некоторые. Вот способ сделать это, не получая поэтапных изменений в тайнике.
Идея состоит в том, чтобы сделать временную фиксацию ваших поэтапных изменений, затем спрятать неустановленные изменения, а затем отменить фиксацию временной фиксации:
На этом этапе у вас будет запас неустановленных изменений, а в вашей рабочей копии будут присутствовать только поэтапные изменения.
источник
--keep-index
в текущем принятом ответе по-прежнему сохраняет то, что находится в индексе, но также сохраняет его в индексе. Итак, это дублируется, и возникает веселье.git add .
Шаг может хотеть быть улучшен ,git add --all
как следует захватить файлы в директории выше текущей рабочей директории тоже.Я обнаружил, что отмеченный ответ не сработал для меня, так как мне нужно было что-то, что действительно спрятало только мои неустановленные изменения. Отмеченный ответ
git stash --keep-index
,, хранит как поэтапные, так и неустановленные изменения. В--keep-index
Часть просто выходит индекс нетронутого на рабочей копии , а также. Это работает для OP, но только потому, что он задал немного другой вопрос, чем он на самом деле хотел получить ответ.Единственный верный способ, который я нашел для хранения неустановленных изменений, - это вообще не использовать тайник:
git checkout -- .
также будет работать вместоapply -R
.Работа Работа работа...
источник
git version 2.6.1.windows.1
,git stash -k
работал , как описано.Git: спрятать неустановленные изменения
Это сохранит все изменения, которые вы не добавляли с помощью git add:
Обратите внимание, что вновь созданные (и не добавленные) файлы останутся в вашем рабочем каталоге, если вы также не используете
-u
переключатель.Кроме того, ваш рабочий каталог должен быть чистым (то есть должны быть добавлены все изменения), когда вы позже будете git stash pop.
http://makandracards.com/makandra/853-git-stash-unstaged-changes
источник
git stash --keep-index
. Поэтапные файлы включены в тайник.