Ответ 1
Просто:
git rm --cached file [file ...]
Конечно, вам нужно убедиться, что файлы-нарушители добавлены в ваш .gitignore
, чтобы они не сразу подтверждались.
Я пытаюсь удалить ненужные файлы из репозитория git. Первоначально эти файлы были добавлены, и теперь они находятся в нескольких ветвях. Я хочу просто остановить отслеживание изменений в этих файлах, мне все равно, какие изменения должны остаться там, но мне нужно, чтобы файлы оставались в файловой системе.
Я пробовал следовать
git filter-branch --index-filter "git rm --cached --ignore-unmatch file_to_remove" HEAD
но это удаляет файл из файловой системы, что нежелательно.
Просто:
git rm --cached file [file ...]
Конечно, вам нужно убедиться, что файлы-нарушители добавлены в ваш .gitignore
, чтобы они не сразу подтверждались.
Если вы хотите сохранить файл в репозитории, вы можете использовать: git update-index --assume-unchanged <fileName>
Сохраняет текущую версию файла в индексе, но вы можете изменить его все, что хотите, и git проигнорирует эти изменения.
Использование команды git rm --cached
опасно, поскольку она по-прежнему обрабатывается как "удаление", отправляемое в удаленный репозиторий. Поэтому, когда вы (или кто-то еще) извлекаете данные из другого экземпляра хранилища, он удалит файл, который вы хотели игнорировать!
Правильный способ заставить git забыть о файле задокументирован здесь GitHub.
Я рекомендую прочитать документацию, но в основном:
git fetch --all
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch full/path/to/file' --prune-empty --tag-name-filter cat -- --all
git push origin --force --all
git push origin --force --tags
git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin
git reflog expire --expire=now --all
git gc --prune=now
просто замените full/path/to/file
на полный путь к файлу. Убедитесь, что вы добавили файл в свой .gitignore
.
Вам также нужно (временно) разрешить не-ускоренные пересылки в ваш репозиторий, так как вы изменяете свою историю git.
Завершите и запустите git clean для каждой ветки.
git -clean - удалить необработанные файлы из рабочего дерева
Очищает рабочее дерево путем рекурсивного удаления файлов, которые не находятся под управлением версиями, начиная с текущего каталога.