Удалить файл из репозитория Git, не удаляя его из локальной файловой системы

моя первоначальная фиксация содержала некоторые файлы журнала. Я добавил *log мой .gitignore и теперь я хочу удалить файлы журнала из моего репозитория.

git rm mylogfile.log

удалит файл из репозитория, но также удалит его из локальной файловой системы.

Как удалить этот файл из РЕПО без удаление моей локальной копии файла?

9 ответов


для одного файла:

git rm --cached mylogfile.log

в одном каталоге:

git rm --cached -r mydirectory

чтобы удалить всю папку из РЕПО (например, файлы 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

шаги, чтобы игнорировать эту папку в следующей совершает

игнорировать эту папку из next коммиты делают один файл в root с именем .gitignore и добавьте в него имя папки. Вы можете поставить столько, сколько вы хотите

.gitignore файл будет выглядеть так

/FolderName

remove directory


более общее решение:

  1. редактировать .

    ECHO mylogfile.log >> .gitignore

  2. удалить все элементы с индекса.

    git rm -r -f --cached .

  3. перестроить индекс.

    git add .

  4. сделать новый commit

    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

Если вы хотите просто отследить файл и не удалять его из локального и удаленного РЕПО, используйте эту команду:

git update-index --assume-unchanged  file_name_with_path