Я зафиксировал и отправил какой-то каталог на github. После этого я изменил .gitignore
файл, добавив каталог, который следует игнорировать. Все работает нормально, но каталог (теперь игнорируемый) остается на github.
Как мне удалить этот каталог из github и истории репозитория?
Ответы:
Правила в вашем
.gitignore
файле применяются только к неотслеживаемым файлам. Так как файлы в этом каталоге уже были зафиксированы в вашем репозитории, вы должны удалить их, создать коммит и отправить его в GitHub:Вы не можете удалить файл из своей истории, не переписав историю своего репозитория - вы не должны этого делать, если кто-то еще работает с вашим репозиторием или вы используете его с нескольких компьютеров. Если вы все еще хотите это сделать, вы можете
git filter-branch
переписать историю - здесь есть полезное руководство .Кроме того, обратите внимание, что вывод из
git rm -r --cached some-directory
будет что-то вроде:Это
rm
отзыв от git о репозитории; файлы все еще находятся в рабочем каталоге.источник
-r
и--cached
. Спасибо.-r
означает рекурсивный, необходимый, если вы делаете целые каталоги.--cached
переопределяет обычное поведение git, удаляя их из рабочего каталога и готовя удаление к фиксации, и заставляет git работать только в области подготовки, готовой к фиксации. Это то, как вы говорите git, что хотите хранить локальные копии файлов.git reset name_of_file
для того, что описано выше, чтобы работатьЯ делаю это:
Который удалит все файлы / папки, которые находятся в вашем git, игнорирует, за исключением того, что вы должны выбрать каждый вручную
Это, кажется, перестало работать для меня, теперь я делаю:
источник
foreach ($i in iex 'git ls-files -i --exclude-from=.gitignore') { git rm --cached $i }
Согласно моему Ответу здесь: Как удалить каталог из репозитория git?
Чтобы удалить папку / каталог только из репозитория git, а не из локального, попробуйте 3 простых шага.
Шаги по удалению каталога
Действия по игнорированию этой папки в следующих коммитах
Файл .gitignore будет выглядеть так
источник
Первый ответ Бланделла мне не помог. Однако это показало мне правильный путь. Я сделал то же самое, как это:
Советую сначала проверить файлы, которые нужно удалить, выполнив следующую инструкцию:
Я использовал файл .gitignore по умолчанию для visual studio и заметил, что он удаляет все папки log и bin в проекте, что не было моим предполагаемым действием.
источник
Примечание. Это решение работает только с графическим интерфейсом Github Desktop. .
С помощью Github Desktop GUI это очень просто.
Переместите папку в другое место (из папки проекта) временно.
Отредактируйте ваш
.gitignore
файл и удалите запись папки, которая будет удалена из главного репозитория на странице github.Зафиксируйте и синхронизируйте папку проекта.
Переместить папку в папку проекта
Повторно отредактируйте
.gitignore
файл.Это все.
источник
Ответ от Бланделла должен сработать, но по какой-то причудливой причине это не касается меня. Я должен был сначала передать имена файлов, выведенные первой командой, в файл, а затем перебрать этот файл и удалить этот файл один за другим.
источник
Если вам также необходимо удалить недавно проигнорированные файлы из истории коммитов ветви, или если вы не хотите, чтобы недавно игнорируемые файлы были удалены из будущих извлечений , посмотрите этот ответ .
источник
Если вы работаете с PowerShell, попробуйте выполнить следующую команду одной командой.
Затем,
git push --force --all
.Документация: https://git-scm.com/docs/git-filter-branch
источник
git filter-branch
отличается от использованияgit rm
? Первоначально я думал, что я должен использовать версию,git filter-branch
но большинство комментариев здесь рекомендуют использоватьgit rm
. Из того, что я понимаю,git rm
только удаляет его из текущей рабочей директории и индекса. Но если он добавил несколько коммитов раньше, он все равно будет в хранилище.git rm
удалит файл из последней фиксации в будущем.git filter-branch
давайте удалим его из всей истории. Смотрите также: help.github.com/articles/…