У меня есть изменения в файле плюс новый файл, и я хотел бы использовать git stash, чтобы убрать их, пока я переключаюсь на другую задачу. Но git stash сам хранит только изменения в существующем файле; новый файл остается в моем рабочем дереве, загромождая мою будущую работу. Как спрятать этот неотслеживаемый файл?
1437
git stash show
ничего не возвращается, и у вас может возникнуть желание удалить его (как я только что сделал, когда в нем содержался полезный скрипт, который я написал несколько месяцев назад → как вернуть сброшенный занач )Ответы:
Чтобы сохранить ваш рабочий каталог, включая неотслеживаемые файлы (особенно те, которые находятся в .gitignore), вы, вероятно, захотите использовать этот cmd:
git stash --include-untracked
Больше деталей:
Обновление 17 мая 2018 года:
В новых версиях git теперь
git stash --all
хранятся все файлы, включая неотслеживаемые и игнорируемые файлы.git stash --include-untracked
больше не касается игнорируемых файлов (протестировано на git 2.16.2).Оригинальный ответ ниже:
Внимание, это навсегда удалит ваши файлы, если в вашем файле gitignore есть записи каталога / *.
Начиная с версии 1.7.7 вы можете использовать
git stash --include-untracked
илиgit stash save -u
хранить неотслеживаемые файлы, не размещая их.Добавьте (
git add
) файл и начните отслеживать его. Тогда заначка. Поскольку все содержимое файла новое, оно будет спрятано, и вы можете манипулировать им по мере необходимости.источник
git stash --include-untracked
ранееgit stash --all
в своем ответе по двум причинам. Во-первых, теперь он лучше отвечает на вопрос ОП в 2019 году, а во-вторых, потому что - все делает то, что большинство пользователей, вероятно, не хотят, так как удаляет все файлы, которые имеют .gitignoredНачиная с git 1.7.7,
git stash
принимает--include-untracked
опцию (или сокращение-u
). Чтобы включить неотслеживаемые файлы в ваш тайник, используйте одну из следующих команд:Внимание, это навсегда удалит ваши файлы, если в вашем файле gitignore есть записи каталога / *.
источник
.gitignore
выглядит так,ignoredDirectory
но неignoredDirectory/*
удаляет те, которые не были отслежены. Даже неотслеживаемые файлы, а не просто каталоги.*.extension
записям?git
1.8.3-u
(--include-untracked
) может сохранять и извлекать неотслеживаемые файлы, ноgit stash show
не отображает неотслеживаемые файлы, которые находятся вДобавьте файл в индекс:
Все содержимое индекса, а также любые неостановленные изменения существующих файлов, попадут в тайник.
источник
git add .
почему-то не принимал это во вниманиеВ git bash сохранение неотслеживаемых файлов достигается с помощью команды
или
http://git-scm.com/docs/git-stash
Git Stash удаляет все неотслеживаемые или незафиксированные файлы из вашей рабочей области. И вы можете вернуть git stash с помощью следующих команд
Это поместит файл обратно в ваше локальное рабочее пространство.
Мой опыт
Мне пришлось внести изменения в мой файл gitIgnore, чтобы избежать перемещения файлов .classpath и .project в удаленное хранилище. Мне не разрешено перемещать этот измененный .gitIgnore в удаленном репо на данный момент.
Файлы .classpath и .project важны для eclipse - моего редактора java.
Прежде всего, я выборочно добавил остальные файлы и отправил их на постановку. Тем не менее, окончательная отправка не может быть выполнена, если только измененные поля .gitIgnore и неотслеживаемые файлы, а именно. .project и .classpath не спрятаны.
я использовал
для хранения измененного файла .gitIgnore.
Для хранения файлов .classpath и .project я использовал
и он удалил файлы из моей рабочей области. Отсутствие этих файлов лишает меня возможности работать на рабочем месте в затмении. Я продолжил с завершением процедуры отправки подтвержденных файлов на удаленный компьютер. Как только это было сделано успешно, я использовал
Это вставило те же файлы обратно в мое рабочее пространство. Это вернуло мне мою способность работать над тем же проектом в затмении. Надеюсь, что это отбросит заблуждения.
источник
~/.gitignore
.На git версии 2.8.1: у меня работает следующее.
Сохранять измененные и неотслеживаемые файлы в stash без имени
Сохранять измененные и неотслеживаемые файлы в stash с именем
Вы можете использовать или поп или применить позже, как указано ниже.
источник
git stash show
не показывал им. Когда я попыталсяgit stash apply
, я получил «ошибка: не удалось восстановить неотслеживаемые файлы из тайника». Тем не менее, файлы были снова перечислены как неотслеживаемые, но изменения в отслеживаемых файлах не были восстановлены. Я думаю, что эти файлы могут быть восстановлены индивидуально, извлекая их из тайника, но это решение оказалось не тем, на что я надеялся.Как было сказано в другом месте, ответ
git add
на файл. например:Однако, вопрос также поднимается в другом ответе: что, если вы действительно не хотите добавлять файл? Ну, насколько я могу судить, ты должен. И следующее НЕ будет работать:
это потерпит неудачу, как показано ниже:
Так что ты можешь сделать? Ну, вы должны действительно добавить файл, однако , вы можете эффективно удалить его позже, с помощью
git rm --cached
:И тогда вы можете продолжить работу, в том же состоянии, в котором вы были до
git add
(а именно с неотслеживаемым файломpath/to/untracked-file
; плюс любые другие изменения, которые могли возникнуть в отслеживаемых файлах).Другая возможность для рабочего процесса на этом будет что-то вроде:
[Примечание: как уже упоминалось в комментарии @mancocapac, вы можете добавить
--exclude-standard
вgit ls-files
команду (так,git ls-files -o --exclude-standard
).]... что также может быть легко написано в сценарии - подойдут даже псевдонимы (представленные в синтаксисе zsh; при необходимости измените) [также я сократил имя файла, чтобы оно умещалось на экране без прокрутки в этом ответе; не стесняйтесь подставлять альтернативное имя файла по вашему выбору]:
Обратите внимание, что последний может быть лучше в качестве сценария или функции оболочки, чтобы разрешить предоставление параметров
git stash
, если вы не хотите,pop
ноapply
и / или хотите иметь возможность указать конкретный тайник, а не просто взять верх один. Возможно, это (вместо второго псевдонима выше) [пробелы разделены, чтобы соответствовать без прокрутки; повторно добавить для повышения читаемости]:Примечание . В этой форме вам необходимо указать аргумент действия, а также идентификатор, если вы собираетесь указать идентификатор тайника, например,
unstashall apply stash@{1}
илиunstashall pop stash@{1}
Что, конечно, вы бы положили в ваш
.zshrc
или эквивалент, чтобы сделать существование в долгосрочной перспективе.Надеюсь, этот ответ будет полезен для кого-то, и все будет собрано в одном ответе.
источник
Я смог спрятать только неотслеживаемые файлы, выполнив:
Последний извлекает тайник отслеживаемых файлов, оставляя таким образом только неотслеживаемые файлы.
источник
git stash save -u
не просто сохраняетuntracked
файлы, но сохраняетtracked
иuntracked
. Я думаю, что первое спасение, которое вы делаете, не является необходимым в этом случае. В atlassian.com/git/tutorials/saving-changes/Если вы хотите сохранить неотслеживаемые файлы, но сохранить индексированные файлы (например, те, которые вы собираетесь зафиксировать), просто добавьте
-k
(сохранить индекс) опцию в-u
источник
Вы можете просто сделать это с помощью команды ниже
или
Для получения дополнительной информации о git stash Посетите этот пост (Нажмите здесь)
источник
давайте предположим, что новый и неотслеживаемый файл называется: "views.json". если вы хотите изменить ветку, сохраняя состояние вашего приложения, я обычно набираю:
Затем:
И это будет спрятано. Тогда я могу просто изменить ветку с
источник
Здесь есть несколько правильных ответов, но я хотел бы отметить, что для новых целых каталогов НЕ
'git add path'
будет работать. Так что, если у вас есть куча новых файлов в unraracked-path и вы делаете это:это будет скрыто со следующим сообщением:
и если путь без отслеживания - единственный путь, который вы копируете, тайник «временный тайник» будет пустым тайником. Правильный способ - добавить весь путь, а не только имя каталога (то есть завершить путь символом '/'):
источник
Я думал, что это можно решить, сказав git, что файл существует, вместо того, чтобы передать все его содержимое в промежуточную область, а затем вызвать
git stash
. Аракнид описывает, как сделать первое.или
Однако последний не работает:
источник
мой любимый, так как он сохраняет также файлы, которые вы добавили и не поставили их.
источник
Я столкнулся с подобной проблемой при использовании Sourcetree с вновь созданными файлами (они также не будут включены в тайник).
Когда я впервые выбрал «ставить все», а затем спрятать недавно добавленные компоненты, которые отслеживаются и, следовательно, включаются в заначку.
источник
Я привык размышлять и желать ту же функцию. Но со временем я заметил, что это действительно не нужно. Когда вы прячетесь, все в порядке, чтобы оставить новые файлы. Ничего «плохого» с ними не случится (когда вы проверяете что-то еще, git выдаст ошибку и не перезапишет существующий неотслеживаемый файл)
А поскольку обычно временные рамки между
git stash
иgit stash pop
довольно малы, вам снова понадобится неотслеживаемый файл. Таким образом, я бы сказал, что неудобство файла, отображаемого воgit status
время работы над чем-то другим (междуgit stash
иgit stash pop
), меньше, чем неудобство, вызванное работой и необходимым вниманием, в противном случае стоило бы попытаться добавить файл без отслеживания в ваш тайникисточник