Подтвердить что ты не робот

Git stash uncached: как удалить все неустановленные изменения?

Предположим, что в проекте с версией git выполняется два набора изменений. Один набор поставлен, а другой - нет.

Я хотел бы перепроверять поэтапные изменения, запустив мой проект в этом состоянии (до фиксации). Что такое простой способ убрать все неустановленные изменения и оставить только поэтапно? Поэтому мне нужно, чтобы неустановленные изменения исчезли из моего проекта, но чтобы они были где-то сохранены для дальнейшей работы.

Это очень похоже на команду git stash. Но git stash поместит как нестационарные, так и поэтапные изменения в сторону моего проекта. И я не могу найти что-то вроде git stash uncached.

4b9b3361

Ответ 1

Если используется опция --keep-index, все изменения, добавленные в индекс, остаются неизменными:

git stash --keep-index

Из документации git-stash:

Тестирование частичных коммитов

Вы можете использовать git stash save --keep-index, если хотите сделать два или больше комментирует изменения в дереве работ, и вы хотите проверить каждое изменение перед фиксацией:

# ... hack hack hack ...
$ git add --patch foo            # add just first part to the index
$ git stash save --keep-index    # save all other changes to the stash
$ edit/build/test first part
$ git commit -m 'First part'     # commit fully tested change
$ git stash pop                  # prepare to work on all other changes
# ... repeat above five steps until one commit remains ...
$ edit/build/test remaining parts
$ git commit foo -m 'Remaining parts'

Но если вы просто хотите визуально проверить только сделанные изменения, вы можете попробовать difftool:

git difftool --cached

Ответ 2

Принятый ответ также ставит поставленные изменения, как указывали некоторые из них, и он не застревает невоспроизводимые файлы. Здесь вы можете сделать это, не получая ваши поэтапные изменения в кошельке, а также удалять и хранить ненужные файлы.

Идея состоит в том, чтобы выполнить временную фиксацию ваших поэтапных изменений, затем закрепить неустановленные изменения, а затем снять фиксацию temp:

# temp commit of your staged changes:
$ git commit -m "WIP"

# stage your previously unstaged files before stashing (so you get untracked files):
$ git add .

$ git stash

# now un-commit your WIP commit:
$ git reset --soft HEAD^

На этом этапе у вас будет своя версия нестационарных изменений и будет иметь только ваши поэтапные изменения в вашей рабочей копии.

Ответ 3

Я обнаружил, что заметный ответ не сработал у меня, так как мне нужно что-то, что действительно скрывало только мои неустановленные изменения. Отмеченный ответ git stash --keep-index задерживает как поэтапные, так и неустановленные изменения. Часть --keep-index просто оставляет индекс неизменным в рабочей копии. Это работает для ОП, но только потому, что он задал несколько иной вопрос, чем он действительно хотел получить ответ.

Единственный верный способ, который я обнаружил, чтобы сохранить неустановленные изменения, заключается в том, чтобы вообще не использовать котировку:

git diff > unstaged.diff
git apply -R unstaged.diff

git checkout -- . также будет работать вместо apply -R.

Работа по работе...

git apply unstaged.diff
rm unstaged.diff

Ответ 4

Git: изменения нестационарных штампов

Это закроет все изменения, которые вы не сделали git add:

git stash -k

Обратите внимание, что вновь созданные (и не добавленные) файлы останутся в вашем рабочем каталоге, если вы также не используете переключатель -u.

git stash -k -u 

Кроме того, ваш рабочий каталог должен быть чистым (т.е. все изменения должны быть добавлены), когда вы снова включите git.

http://makandracards.com/makandra/853-git-stash-unstaged-changes