Как удалить каталог из репозитория git?

У меня есть 2 каталога в моем хранилище GitHub. Я хотел бы удалить один из них. Как я могу сделать это без удаления и повторного создания всего хранилища?

17 ответов

Решение

Удалить директорию из git и local

Вы можете оформить "мастер" с обоими каталогами;

git rm -r one-of-the-directories
git commit -m "Remove duplicated directory"
git push origin <your-git-branch> (typically 'master', but not always)

Удалить каталог из git, но НЕ локально

Как упоминалось в комментариях, обычно вы хотите удалить этот каталог из git, но не удалять его полностью из файловой системы (локальной).

В этом случае используйте:

git rm -r --cached myFolder

Чтобы удалить папку / каталог только из репозитория git, а не из локального, попробуйте 3 простые команды.


Шаги по удалению каталога

git rm -r --cached FolderName
git commit -m "Removed folder from repository"
git push origin master

Действия по игнорированию этой папки в следующих коммитах

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

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

/FolderName

удалить каталог

Если по какой-то причине сказанное Кармаказе не работает, вы можете попробовать удалить каталог, который вы хотите удалить (через браузер файловой системы), введя команду
git add -A
а потом
git commit -m 'deleting directory'
а потом
git push origin master,

Я уже зафиксировал папку раньше и хочу удалить каталог из истории.

Я сделал следующее:

Добавить папку в .gitignore:

echo Folder_Name/ >> .gitignore

Удалить из всех коммитов:

git filter-branch --index-filter 'git rm -rf --cached --ignore-unmatch Folder_Name/' --prune-empty --tag-name-filter cat -- --all

удалите ссылки из старых коммитов:

git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d

Убедитесь, что все старые ссылки полностью удалены

rm -Rf .git/logs .git/refs/original

Выполните сборку мусора

git gc --prune=all --aggressive

отправьте вам изменения в онлайн-репозиторий:

git push

Вы здесь закончили.

Но вы можете выполнить следующие действия, чтобы отправить все изменения во все ветки: Но будьте осторожны с этой командой!

git push origin --all --force
git push origin --tags --force

После этого папка была удалена из git, но не удалена с локального диска.

Вы можете попробовать это: git rm -rf <directory_name>

Это заставит удалить каталог.

Если вы удалите файлы в каталоге (с git rm как объясняют другие ответы), тогда каталог больше не существует, насколько это касается git. Вы не можете зафиксировать пустой каталог и не можете удалить его.

В отличие от Subversion, где вы должны явно svn rm emptyfolder/и, кстати, почему man страница для git описывает себя как "тупой трекер контента"

Ответ на вопрос "Как добавить пустой каталог в репозиторий git" содержит ссылки на часто задаваемые вопросы по этой теме:

В настоящее время дизайн индекса git (промежуточной области) позволяет только перечислять файлы, и никто, достаточно компетентный, чтобы внести изменения, чтобы пустые каталоги могли позаботиться об этой ситуации, достаточно, чтобы исправить это.

Каталоги добавляются автоматически при добавлении файлов внутри них. То есть каталоги никогда не нужно добавлять в репозиторий, и они не отслеживаются сами по себе.

Ты можешь сказать "git add <dir>"и он добавит туда файлы.

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

Для удаления пустых папок

я хотел удалить пустой каталог (папку), который я создал, git не может удалить его, после некоторого исследования я узнал, что Git не отслеживает пустые каталоги. Если у вас есть пустой каталог в вашем рабочем дереве, вы должны просто удалить его с помощью

rm -r folderName

Нет необходимости привлекать Git.

Перейдите в каталог git и введите следующую команду:rm -rf < Имя каталога>

После удаления каталога зафиксируйте изменения:git commit -m "Your Commit Message"

Затем просто отправьте изменения в удаленный каталог GIT:git push origin < Branch name>

Вы можете удалить папку локально, а затем нажать, как показано ниже:

git rm -r folder_name
git commit -m "your commit"
git push origin master

Комбинация двух ответов сработала для меня

git rm -r one-of-the-directories
git commit . -m "Remove duplicated directory"
git push

если по-прежнему отображается предупреждение, удалите файлы вручную

git filter-branch --tree-filter 'rm -rf path/to/your/file' HEAD
git push

Я обычно использую git add --all удалить файлы / папки из удаленных репозиториев

rm -r folder_name
git add --all
git commit -m "some comment"
git push origin master

master может быть заменен любой другой веткой хранилища.

Вы можете использовать Attlasian Source Tree (Windows) ( https://www.atlassian.com/software/sourcetree/overview). Просто выберите файлы из дерева и нажмите кнопку "Удалить" вверху. Файлы будут удалены из локального репозитория и локальной базы данных git. Затем совершите, затем нажмите.

Первая команда git должна знать кто ты, прежде чем что-то удалять

  1. мерзавец
  2. git config user.name "кто-то"
  3. git config user.email "somebody@someplace.com"
  4. git rm -r
  5. git commit -m "удаление dir"
  6. мастер происхождения git push

Один из моих коллег предложил BFG Repo-Cleaner, который я считаю мощным. Это не только удаляет нежелательные данные, но также очищает ваш репозиторий от любой связанной информации о коммите.

Если вы удаляете каталог из веб-приложения GitHub, вы найдете опцию удаления. Однако после этого он предоставит вам список удаляемых файлов с опцией фиксации внизу. Не забудьте совершить это. В противном случае каталог не будет удален.

Ссылка - https://docs.github.com/en/repositories/working-with-files/managing-files/deleting-files-in-a-repository

Чтобы добавить новый каталог:

mkdir <YOUR-DIRECTORY>

Но теперь Git не знает об этом новом каталоге, потому что Git отслеживает файлы, а не каталоги DIRECTORY

git status

Git не будет знать о внесенных нами изменениях, поэтому мы добавим скрытые .keep файл, чтобы Git знал об этом новом изменении.

touch /YOUR-directory/.keep

Теперь, если вы нажмете git status Git будет в курсе изменений.

И если вы хотите удалить каталог, вы должны использовать эту команду.

rm -r <YOUR-DIRECTORY>

И если вы проверили с помощью git status, вы увидите, что каталог был удален.

пытаться rm -r -f <folder name> или же rm -r --force <folder name> - принудительно удалить папку

Другие вопросы по тегам