Удалить файл из репозитория Git, не удаляя его из локальной файловой системы
моя первоначальная фиксация содержала некоторые файлы журнала. Я добавил *log
мой .gitignore
и теперь я хочу удалить файлы журнала из моего репозитория.
git rm mylogfile.log
удалит файл из репозитория, но также удалит его из локальной файловой системы.
как я могу удалить этот файл из репозитория без удаление моей локальной копии файла?
9 ответов:
чтобы удалить всю папку из РЕПО (например, файлы Resharper), сделайте следующее:
git rm -r --cached folderName
я зафиксировал некоторые файлы resharper и не хотел, чтобы они сохранялись для других пользователей проекта.
вы также можете удалить файлы из репозитория на основе ваших .гитюдного без удаления их из локальной файловой системы :
git rm --cached `git ls-files -i -X .gitignore`
или, как вариант, в Windows Powershell:
git rm --cached $(git ls-files -i -X .gitignore)
кроме того, если вы ввели конфиденциальные данные (например, файл, содержащий пароли), вы должны полностью удалить его из истории репозитория. Вот руководство, объясняющее, как это сделать: http://help.github.com/remove-sensitive-data/
согласно моему ответу здесь: https://stackoverflow.com/questions/6313126/how-to-remove-a-directory-in-my-github-repository
чтобы удалить папку / каталог или файл только из репозитория git, а не из локального попробуйте 3 простых шага.
шаги для удаления каталога
git rm -r --cached File-or-FolderName git commit -m "Removed folder from repository" git push origin master
шаги, чтобы игнорировать эту папку в следующей совершает
игнорировать эту папку из следующего обязывает сделать один файл в корне с именем .gitignore и поместите это имя папки в него. Вы можете поставить столько, сколько вы хотите
.gitignore файл будет выглядеть так
/FolderName
более общее решение:
Edit .
ECHO mylogfile.log >> .gitignore
удалить все элементы с индекса.
git rm -r -f --cached .
перестроить индекс.
git add .
сделать новый коммит
git commit -m "Removed mylogfile.log"
Git позволяет игнорировать эти файлы, предполагая, что они не изменились. Этот делается путем запуска . После маркировки файла как такового, git будет полностью игнорировать любые изменения в этот файл, они не будут отображаться, когда запуск git status или git diff, и они никогда не будут зафиксированы.
(от https://help.github.com/articles/ignoring-files)
следовательно, не удаляя его, но игнорируя изменения в нем навсегда. Я думаю, что это работает только локально, поэтому сотрудники могут видеть изменения в нем, если они не выполняют ту же команду, что и выше. (Все еще нужно проверить это, хотя.)
Примечание: это не ответ на вопрос напрямую, но основано на последующих вопросах в комментариях других ответов.
выше ответы не работает для меня. Я использовал filter-branch для удаления всех зафиксированных файлов
удалите файл из репозитория git с помощью:
git filter-branch --tree-filter 'rm file'
удалите папку из репозитория git с помощью:
git filter-branch --tree-filter 'rm -rf directory'
это удаляет каталог или файл из всех коммитов
вы можете указать фиксацию с помощью:
git filter-branch --tree-filter 'rm -rf directory' HEAD
или диапазон
git filter-branch --tree-filter 'rm -rf vendor/gems' t49dse..HEAD
чтобы подтолкнуть все к удаленному, вы можете сделать:
git push origin master --force