Git удалить файл из репозитория но оставить локально
моя первоначальная фиксация содержала некоторые файлы журнала. Я добавил *log мой .gitignore и теперь я хочу удалить файлы журнала из моего репозитория.
удалит файл из репозитория, но также удалит его из локальной файловой системы.
Как удалить этот файл из РЕПО без удаление моей локальной копии файла?
для одного файла:
в одном каталоге:
чтобы удалить всю папку из РЕПО (например, файлы Resharper), сделайте следующее:
я зафиксировал некоторые файлы resharper и не хотел, чтобы они сохранялись для других пользователей проекта.
вы также можете удалить файлы из репозитория на основе ваших .гитюдного без удаления их из локальной файловой системы :
или, альтернативно, в Windows Powershell:
чтобы удалить папку / каталог или файл только из репозитория git, а не из локального попробуйте 3 простых шага.
шаги для удаления каталога
шаги, чтобы игнорировать эту папку в следующей совершает
игнорировать эту папку из next коммиты делают один файл в root с именем .gitignore и добавьте в него имя папки. Вы можете поставить столько, сколько вы хотите
.gitignore файл будет выглядеть так
более общее решение:
ECHO mylogfile.log >> .gitignore
удалить все элементы с индекса.
git rm -r -f --cached .
сделать новый commit
git commit -m "Removed mylogfile.log"
Git позволяет игнорировать эти файлы, предполагая, что они не изменились. Этот делается путем запуска . После маркировки файла как такового, git будет полностью игнорировать любые изменения в этот файл, они не будут отображаться, когда запуск git status или git diff, и они никогда не будут зафиксированы.
следовательно, не удаляя его, но игнорируя изменения в нем навсегда. Я думаю, это работает только локально, поэтому сотрудники могут видеть изменения в нем, если они не выполняют ту же команду, что и выше. (Все еще нужно проверить это.)
выше ответы не работает для меня. Я использовал filter-branch для удаления всех зафиксированных файлов
удалите файл из репозитория git с помощью:
удалите папку из репозитория git с помощью:
это удаляет каталог или файл из всех коммитов
вы можете указать фиксацию, используя:
чтобы подтолкнуть все к удаленному, вы можете сделать:
Если вы хотите просто отследить файл и не удалять его из локального и удаленного РЕПО, используйте эту команду:
Мой первоначальный коммит содержал несколько файлов журнала. Я добавил *log в свой .gitignore , и теперь я хочу удалить файлы журнала из моего хранилища.
удалит файл из хранилища, но также удалит его из локальной файловой системы.
Как я могу удалить этот файл из репозитория, не удаляя мою локальную копию файла?
Когда --cached задано, поэтапное содержимое должно соответствовать либо концу ветви, либо файлу на диске, что позволяет удалить файл только из индекса.
Итак, для одного файла:
и для одного каталога:
Легко пропустить, потому что это не так само за себя, как svn rm --keep-local . Но как мне сохранить файлы на удаленных серверах? Это сохраняет мой локальный, но если я нажму и потяну с другого сервера, файл будет удален. Я также добавил .gitignore для файла, но он все еще удален Это все равно удаляет файлы, git pull если вы находитесь за коммитом после git rm Стоит отметить, что после запуска команды в ответе необходимо использовать git commit -m "Commit message" и git push . Если у вас есть какие-либо другие поэтапные изменения (проверьте с помощью git status ), они также будут зафиксированы в это время. Так как это самый приемлемый ответ и он не делает то, о чем просят, я расскажу, что я делаю. Я использую команду git rm --cached mylogfile.log и удаляю файл из репозитория. Чтобы не потерять файл в продуктивной системе, я делаю резервную копию файла и вытащу после этого. Файл будет удален, как упоминалось ранее, и его необходимо скопировать обратно из резервной копии. Это довольно больно, но я не нашел лучшего решения этой проблемы.Чтобы удалить всю папку из репозитория (например, файлы Resharper), сделайте следующее:
Я зафиксировал некоторые файлы для изменения резкости и не хотел, чтобы они сохранялись для других пользователей проекта.
Просто добавленная заметка для будущих посетителей: не используйте графический интерфейс для «синхронизации» фиксации обратно в репо. Это вернет файлы обратно в ваш локальный репозиторий. Вы должны сделать, Git Push repo branch чтобы фактически удалить файлы с пульта.Вы также можете удалить файлы из хранилища на основе вашего .gitignore, не удаляя их из локальной файловой системы:
Или, в качестве альтернативы, в Windows Powershell:
Работает на Windows, если вы используете Git Bash вместо cmd-консоли Люблю это. Работал за исключением того, что у меня были некоторые файлы, которые заканчивались тем, что имели пробелы в имени файла. Я изменил решение здесь это: git ls-files -i -X .gitignore | xargs -I<> git rm --cached "<>" . Пожалуйста, подумайте об изменении или добавлении этого решения к ответу здесь, потому что это отличный инструмент для . Я не пробовал, но это должно быть проверено, удалит ли он также такие файлы, .gitkeep которые сохраняют пустую папку в хранилище. Например. .gitignore содержать папку uploads и репо вынужден отслеживать .gitkeep . Удалив все из репо под uploads него, удалят также .gitkeep . Это предложение отлично работает в powershell: git rm --cached $ (git ls-files -i -X .gitignore)Чтобы удалить папку / каталог или файл только из репозитория git, а не из локального, попробуйте 3 простых шага.
Шаги по удалению каталога
Действия по игнорированию этой папки в следующих коммитах
Чтобы игнорировать эту папку из следующих коммитов, создайте в корневом каталоге один файл с именем .gitignore и поместите в него имя этой папки. Вы можете положить столько, сколько хотите
Файл .gitignore будет выглядеть так
Более общее решение:
Редактировать .gitignore файл
ECHO mylogfile.log >> .gitignore
Удалить все элементы из индекса.
git rm -r -f --cached .
Сделать новый коммит
git commit -m "Removed mylogfile.log"
Из GitHub? NO. Если вы уже нажали на github, он не удалит его с сайта. Но это обновит ваш локальный репозиторий git. Комментарий, который вы удалили, был на самом деле более удален :) Проблема с решением rm --cashed состоит в том, что он в конечном итоге удалит файл, когда вы нажмете - правильно? И это не то, что люди хотят, когда говорят «Удалить файл из хранилища, не удаляя его из локальной файловой системы ». Теперь, почему принятое выше решение мне не подходит - возможно, ОП работал один и никогда не работал? Не знаю. Я понимаю, что GitHub "когда-то толкнул всегда" проблема ofc Я не думаю, что есть 100% решение, если вы не спросите сам Github. А пока придерживайтесь этого. Скопируйте файл, добавьте в gitignore, выполните git rm -r, зафиксируйте, нажмите, восстановите файл. Вам удалось найти другое решение?Git позволяет игнорировать эти файлы, предполагая, что они не изменены. Это делается с помощью git update-index --assume-unchanged path/to/file.txt команды. После пометки файла как такового, git будет полностью игнорировать любые изменения в этом файле; они не будут отображаться при запуске git status или git diff и никогда не будут зафиксированы.
Следовательно, не удаляя это, но игнорируя изменения к этому навсегда. Я думаю, что это работает только локально, поэтому коллеги по-прежнему могут видеть изменения, если они не выполняют ту же команду, что и выше. (Тем не менее, необходимо проверить это.)
Примечание. Это не дает прямого ответа на вопрос, а основано на последующих вопросах в комментариях к другим ответам.
У меня есть 2 каталога в моем хранилище GitHub. Я хотел бы удалить один из них. Как я могу сделать это без удаления и повторного создания всего хранилища?
@Iarsmans: да, 6 файлов. Оба каталога идентичны, за исключением одного в верхнем регистре, другого в нижнем регистре.Вы можете оформить «мастер» с обоими каталогами;
Как уже упоминалось в комментариях, обычно вы хотите удалить этот каталог из git, но не удалять его полностью из файловой системы (локальной).
В этом случае используйте:
У меня была точно такая же ситуация. Когда я пытался git rm -r myFolder это работает, но также удалил все из каталога «MyFolder». Пришлось вернуть все в папку «MyFolder», а затем зафиксировать. @Justin Чтобы удалить только из git и оставить файловую систему как есть, используйте git rm -r --cached myFolder @ user2441441 У меня была эта ошибка, когда я пытался удалить папку / файл, который вообще не был добавлен в git rm -r --cached directory/ только удаляет из git отслеживается, но структура хранилища остается.Чтобы удалить папку / каталог только из репозитория git, а не из локального, попробуйте 3 простые команды.
Шаги по удалению каталога
Действия по игнорированию этой папки в следующих коммитах
Чтобы игнорировать эту папку из следующих коммитов, создайте в корневом каталоге один файл с именем .gitignore и поместите в него имя этой папки. Вы можете положить столько, сколько хотите
Файл .gitignore будет выглядеть так
Если по какой-то причине сказанное karmakaze не работает, вы можете попробовать удалить каталог, который вы хотите использовать, или с помощью браузера файловой системы (например, в Windows File Explorer). После удаления каталога введите команду:
git add -A
и затем,
git commit -m 'deleting directory'
и затем
git push origin master .
Вы можете попробовать это: git rm -rf <directory_name>
Это заставит удалить каталог.
Если вы удалите файлы в каталоге ( git rm как объясняют другие ответы), то каталог больше не существует, если речь идет о git. Вы не можете зафиксировать пустой каталог или удалить его.
Это не похоже на Subversion, где вы должны явно svn rm emptyfolder/ , и, кстати, почему man страница для git описывает себя как «глупый трекер контента»
Я добавил файл с именем "file1.txt" в репозиторий Git. После этого я зафиксировал его, добавил пару каталогов с именем dir1 and dir2 и отправил их в репозиторий Git.
Теперь текущее хранилище имеет "file1.txt" , dir1 и dir2 . Как я могу удалить, "file1.txt" не влияя на других, как dir1 и dir2 ?
git rm это правильный ответ, но помните, что файл все еще будет там в истории. Если вы хотите удалить файл, потому что он содержал конфиденциальную информацию, вам нужно сделать что-то более радикальное. (Изменение истории, особенно для контента, который вы уже добавили, является радикальным действием, и его следует избегать, если это возможно.) Примечание: в GitHub вы теперь можете напрямую удалить файл из веб-интерфейса (даже не клонируя репо). Смотрите мой ответ ниже . @KeithThompson, что это может быть, если я отчаянно хочу это сделать?Если вы хотите удалить файл из репозитория Git и файловой системы , используйте:
Но если вы хотите удалить файл только из репозитория Git и не удалять его из файловой системы, используйте:
И подтолкнуть изменения к удаленному репо
Также удобно: git rm -r directory // Удалить каталог и контент Это не собирается избавляться от этого файла в других коммитах. Обратите внимание, что файл будет удален и локально. Если вы хотите удалить его только из репозитория, выполните: git rm --cached file1.txt Стоит отметить, что если этот файл содержит конфиденциальную информацию (например, учетные данные), вы должны немедленно изменить эти учетные данные . Процитируем GitHub: «После того, как вы отправили коммит в GitHub, вы должны рассматривать любые содержащиеся в нем данные как скомпрометированные. Если вы зафиксировали пароль, измените его! Если вы зафиксировали ключ, сгенерируйте новый».git rm file.txt удаляет файл из репозитория, но также удаляет его из локальной файловой системы .
Чтобы удалить файл из репозитория и не удалять его из локальной файловой системы, используйте:
git rm --cached file.txt
Ниже приведена точная ситуация, когда я использую git для поддержки контроля версий для веб-сайта моего бизнеса, но каталог «mickey» был папкой tmp для обмена частным контентом с разработчиком САПР. Когда он нуждался в ОГРОМНЫХ файлах, я создал личный, несвязанный каталог и установил там ftpd файлы для его загрузки через браузер. Забыв, что я сделал это, я позже выполнил git add -A из базовой директории сайта. Впоследствии git status показали новые файлы, требующие фиксации. Теперь мне нужно было удалить их из отслеживания git и контроля версий .
Ниже приведен пример того, что случилось со мной, когда я случайно удалил .003 файл. К счастью, мне все равно, что случилось с локальной копией .003 , но некоторые другие в настоящее время измененные файлы были обновлениями, которые я только что сделал на веб-сайте, и они были бы грандиозными, если их удалить в локальной файловой системе! «Локальная файловая система» = живой сайт (не очень хорошая практика, но реальность) .
Обновление: Этот ответ получает некоторый трафик, поэтому я подумал, что упомяну другой мой ответ Git, делится парой отличных ресурсов: На этой странице есть рисунок, который помогает демистифицировать Git для меня. Книга "Pro Git" онлайн и мне очень помогает.
Затем вам нужно будет зафиксировать это с помощью чего-то подобного, git commit -m "Just removing file1.txt" а затем, если у вас есть удаленный репозиторий, протолкнуть коммит с чем-то вроде git push origin master .Во-первых, если вы используете git rm , особенно для нескольких файлов, учтите, что любой подстановочный знак будет разрешен оболочкой, а не git командой.
Но, если ваш файл уже находится на GitHub, вы можете (с июля 2013 года) напрямую удалить его из веб-интерфейса!
Просто просмотрите любой файл в вашем хранилище, щелкните значок корзины в верхней части и подтвердите удаление, как и любое другое редактирование через Интернет.
Затем " git pull " в вашем локальном репо, и это также приведет к удалению файла локально.
Что делает этот ответ (окольным) способом удаления файла из git repo?
(Не говоря уже о том, что файл на GitHub находится в «git repo»)
(фиксация будет отражать удаление этого файла):
И просто так, это ушло.
Для получения справки об этих функциях обязательно прочитайте наши справочные статьи по созданию , перемещению , переименованию и удалению файлов.
Примечание. Так как это система контроля версий, Git всегда имеет вашу спину, если вам нужно восстановить файл позже.
Последнее предложение означает, что удаленный файл все еще является частью истории, и вы можете восстановить его достаточно легко (но пока не через веб-интерфейс GitHub):
Git как удалить файл из репозитория, сохранив локально и удалить из удаленного репозитория (ранее был добавлен туда)?
Давно по ошибке был добавлен файл в локальный репозиторий - .bashgui.xml
были - git commit и git pull remote master
удален из локального репозитория с сохранением файла - git rm --cached .bashgui.xml
но в удаленном репозитории после git pull remote master файл остается
1. как удалить из удаленного репозитория?
2. Есть файл в котором содержится конфигурация приложения с паролями, есть способ сохранять файл в репозиторий но с удалением/подменой паролей?
Вопрос неточный. Если в удаленный репозиторий попал файл с паролями, и к этому репозиторию есть доступ у других людей, то первое, что нужно сделать - поменять все пароли, которые оказались опубликованы. Потом файл копируете в надежное место, удаляете в рабочей копии, комитите, добавляете в gitignore, снова коммитите. Делаете git push. Файл можно вернуть обратно.
Если доступ есть только у вас, или принципиально хотите удалить информацию из хранилища, воспользуйтесь командами изменения существующих коммитов `git rebase --interactive` (подробнее в Изменение коммитов в Git, раздел "Изменение НЕ последнего коммита") и принудительной перезаписи истории `git push origin +master` (git push -f).
По второму вопросу. Есть следующая техника: в репозиторий добавляется файл config.ini.example с полным набором настроек, только ненастоящими паролями. В gitignore добавляется config.ini. После этого можно смело копировать config.ini.example в config.ini, вносить нужные изменения, работать.
Можно попробовать сделать коммит в удалённый репозиторий, в котором данный файл будет удалён. А потом в ручном режиме просто добавить его на локальной машине и внести в игнор.
Самый простой вариант - удалить удаленный репозиторий и снова запушить, если вы работаете один.
Читайте также: