Как вы прячете неотслеженный файл?
У меня есть изменения в файле, плюс новый файл, и я хотел бы использовать git stash, чтобы убрать их, пока я переключаюсь на другую задачу. Но git stash сам по себе прячет только изменения в существующий файл; новый файл остается в моем рабочем дереве, загромождая мою будущую работу. Как мне спрятать этот неотслеженный файл?
11 ответов:
Обновление 17 Мая 2018:
новые версии git теперь имеют
git stash --allкоторый прячет все файлы, включая неотслеженные и игнорируемые файлы.git stash --include-untrackedбольше не касается игнорируемых файлов (проверено на git 2.16.2).оригинальный ответ ниже:
для версии 1.7.7 вы можете использовать
git stash --include-untrackedилиgit stash save -uчтобы спрятать неотслеженные файлы без их размещения.добавить (
git add) файл, и начать отслеживать его. Потом тайник. Поскольку все содержимое файла является новым, они будут спрятаны, и вы можете манипулировать им по мере необходимости.
начиная с git 1.7.7,
git stashпринимает--include-untrackedопция (или короткая рука-u). Включить неотслеживаемый файлы в свой тайник, используйте одну из следующих команд:git stash --include-untracked git stash -u
Добавить файл в индекс:
git add path/to/untracked-file git stashвсе содержимое индекса, плюс любые неиндексированных изменений в существующие файлы, все в заначку.
в git bash сохранение неотслеженных файлов достигается с помощью команды
git stash --include-untrackedили
git stash -uhttp://git-scm.com/docs/git-stash
git stash удаляет все неотслеженные или незафиксированные файлы из вашего рабочего пространства. И вы можете вернуть git stash, используя следующие команды
git stash popэто поместит файл обратно в локальную рабочую область.
мой опыт
мне пришлось выполните модификацию моего файла gitIgnore, чтобы избежать перемещения .classpath и .файлы проекта в репозиторий. Мне не разрешено перемещать это изменение .gitIgnore в удаленном РЕПО на данный момент.
.classpath и .файлы проекта важны для eclipse - это мой редактор java.
Я в первую очередь выборочно добавил мои остальные файлы и зафиксировал для постановки. Однако окончательный толчок не может быть выполнен, если не изменено .гитюдного поля и игнорируемых файлов, а именно. .проект и. classpath, который не припрятал.
Я
git stashдля хранения измененных.файла.gitignore
для припрятать .classpath и .файл проекта, я использовал
git stash --include-untrackedи он удалил файлы из моего рабочего пространства. Отсутствие этих файлов лишает меня возможности работать на моем рабочем месте в eclipse. Я продолжил выполнение процедуры для перемещения зафиксированных файлов на удаленный компьютер. Как только это было сделано успешно, я использовал
git stash popэто вставило те же файлы обратно в мое рабочее пространство. Это вернуло мне способность работать над тем же проектом в eclipse. Надеюсь, что это отметает заблуждения.
как уже было сказано в другом месте, ответ
git addфайл. например:git add path/to/untracked-file git stashоднако вопрос также возникает в другом ответе: что делать, если вы действительно не хотите добавлять файл? Ну, насколько я могу судить, Вы должны. И следующее будет не работы:
git add -N path/to/untracked/file # note: -N is short for --intent-to-add git stashэто не удастся, как показано ниже:
path/to/untracked-file: not added yet fatal: git-write-tree: error building trees Cannot save the current index stateИтак, что вы можете сделать? Ну, вы должны действительно добавить файл , вы можете эффективно удалить его позже, с
git rm --cached:git add path/to/untracked-file git stash save "don't forget to un-add path/to/untracked-file" # stash w/reminder # do some other work git stash list # shows: # stash@{0}: On master: don't forget to un-add path/to/untracked-file git stash pop # or apply instead of pop, to keep the stash available git rm --cached path/to/untracked-fileи тогда вы можете продолжать работать, в том же состоянии, в котором вы были до
git add(именно с неотслеживаемый файл называетсяpath/to/untracked-file; плюс любые другие изменения, которые вы, возможно, должны были отслеживать файлы).еще одна возможность для рабочего процесса на этом будет что-то вроде:
git ls-files -o > files-to-untrack git add `cat files-to-untrack` # note: files-to-untrack will be listed, itself! git stash # do some work git stash pop git rm --cached `cat files-to-untrack` rm files-to-untrack[Примечание: как уже упоминалось в комментарии @mancocapac, вы можете добавить
--exclude-standardк (так,git ls-files -o --exclude-standard).]... который также может быть легко написан-даже псевдонимы будут делать (представлены в синтаксисе zsh; отрегулируйте по мере необходимости) [кроме того, я сократил имя файла, чтобы все это поместилось на экране без прокрутки в этом ответе; не стесняйтесь заменять альтернативное имя файла по вашему выбору]:
alias stashall='git ls-files -o > .gftu; git add `cat .gftu`; git stash' alias unstashall='git stash pop; git rm --cached `cat .gftu`; rm .gftu'обратите внимание, что последний может быть лучше в качестве сценария оболочки или функции, чтобы разрешить параметры для
git stash, в случае, если вы не хочу!--15--> ноapply, и/или хотите иметь возможность указать конкретный тайник, а не просто взять верхний. Возможно, это (вместо второго псевдонима, выше) [пробелы разделены, чтобы соответствовать без прокрутки; повторно добавить для повышения разборчивости]:function unstashall(){git stash "${@:-pop}";git rm --cached `cat .gftu`;rm .gftu}Примечание: в этой форме вам нужно указать аргумент действия, а также идентификатор, если вы собираетесь предоставить идентификатор тайника, например
unstashall apply stash@{1}илиunstashall pop stash@{1}что конечно, вы бы положили в свой
.zshrcили эквивалент для того чтобы сделать существует долгосрочность.надеюсь, этот ответ кому-то полезен, собирая все вместе в одном ответе.
на Git версии 2.8.1: следующие работы для меня.
чтобы сохранить измененные и неотслеженные файлы в тайнике без имени
git stash save -uчтобы сохранить измененные и неотслеженные файлы в тайнике с именем
git stash save -u <name_of_stash>вы можете использовать либо pop и применить позже следующим образом.
git stash pop git stash apply stash@{0}
я смог спрятать просто неотслеженные файлы, выполнив:
git stash save "tracked files I'm working on" git stash save -u "untracked files I'm trying to stash" git stash pop stash@{1}последний выскакивает тайник отслеживаемых файлов, таким образом оставляя только неотслеживаемые файлы.
здесь есть несколько правильных ответов, но я хотел бы отметить, что для новых целых каталогов,
'git add path'будет не работа. Так что если у вас есть куча новых файлов в untracked-path и этого:git add untracked-path git stash "temp stash"это будет тайник со следующим сообщением:
Saved working directory and index state On master: temp stash warning: unable to rmdir untracked-path: Directory not emptyи если untracked-path это единственный путь, который вы прячете, тайник "temp stash" будет пустым тайником. Правильный способ-добавить весь путь, а не только имя каталога (т. е. конец пути с '/'):
git add untracked-path/ git stash "temp stash"
Я думал, что это можно решить, сообщив git, что файл существует, а не фиксировать все его содержимое в промежуточной области, а затем вызвать
git stash. Аракнид описание как сделать бывших.git add --intent-to-add path/to/untracked-fileили
git update-index --add --cacheinfo 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 path/to/untracked-fileоднако последнее не работает:
$ git stash b.rb: not added yet fatal: git-write-tree: error building trees Cannot save the current index state
Вы можете просто сделать это с помощью ниже команду
git stash save --include-untrackedили
git stash save -uподробнее о git stash посетите этот пост (нажмите здесь)
Я имел обыкновение размышлять и желать ту же самую функцию. Но со временем я заметил, что это действительно не нужно. Когда вы прячете, это нормально, чтобы оставить новые файлы. Ничего "плохого" с ними не может случиться (когда вы проверяете что-то еще, git будет ошибаться и не перезаписывать существующий неотслеженный файл)
и так как обычно временные рамки между
git stashиgit stash popдовольно мал,вам снова понадобится неотслеженный файл. Поэтому я бы сказал, что неудобство файла появляется вgit statusпока вы работаете над чем-то другим (междуgit stashиgit stash pop) меньше, чем неудобство, вызванное работой и необходимым вниманием, в противном случае стоило бы попытаться добавить неотслеженный файл в ваш тайник.
Comments