В моем первоначальном коммите содержались файлы журнала. Я добавил *log
в мой .gitignore
, и теперь я хочу удалить файлы журнала из своего репозитория.
git rm mylogfile.log
удалит файл из репозитория, но также удалит его из локальной файловой системы.
Как удалить этот файл из репо без удаления локальной копии файла?
Для одного файла:
git rm --cached mylogfile.log
Для одного каталога:
git rm --cached -r mydirectory
svn rm --keep-local
.
Чтобы удалить всю папку из репо (например, файлы Resharper), выполните следующие действия:
git rm -r --cached folderName
Я сделал некоторые файлы resharper и не хотел, чтобы они сохранялись для других пользователей проекта.
Git Push repo branch
чтобы фактически удалить файлы с пульта.
Вы также можете удалить файлы из репозитория на основе .gitignore, не удаляя их из локальной файловой системы:
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-from-git-repository
Шаги по удалению каталога
git rm -r --cached File-or-FolderName
git commit -m "Removed folder from repository"
git push origin master
Шаги, чтобы игнорировать эту папку в следующих коммандах
Чтобы игнорировать эту папку из следующих коммитов, создайте один файл в корневом каталоге с именем .gitignoreи вставьте это имя папок в него. Вы можете разместить столько, сколько хотите
.gitignore файл будет выглядеть следующим образом
/FolderName
Более общее решение:
Изменить .gitignore
файл.
ECHO mylogfile.log >> .gitignore
Удалите все элементы из индекса.
git rm -r -f --cached .
Восстановить индекс.
git add .
Сделать новую фиксацию
git commit -m "Removed mylogfile.log"
Git позволяет игнорировать эти файлы, предполагая, что они не изменились. Эта выполняется командой
git update-index --assume-unchanged path/to/file.txt
. После маркировки файла как такового git будет полностью игнорировать любые изменения в этом файле; они не появятся, когда запуская git статус или git diff, и они никогда не будут зафиксированы.
(Из https://help.github.com/articles/ignoring-files)
Следовательно, не удаляя его, но игнорируя его изменения навсегда. Я думаю, что это работает только на местном уровне, поэтому сотрудники все еще могут видеть изменения в нем, если они не выполняют ту же команду, что и выше. (Все еще нужно проверить это.)
Примечание. Это не отвечает на вопрос напрямую, но основывается на последующих вопросах в комментариях к другим ответам.
Выше ответы не помогли мне. Я использовал фильтр-ветвь, чтобы удалить все зафиксированные файлы.
удалите файл из репозитория 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 rm -r --cached NAME
- это хитрость, позволяющая удалить его из локального репозитория git и предотвратить его влияние на любого, кто получит позже (удалив историю файла или каталога из git.)
Если вы хотите просто удалить файл и не удалить его из локального и удаленного репо, используйте команду thhis:
git update-index --assume-unchanged file_name_with_path