Удаление каталога из истории git в определенной ветке

Проблема: В моем репозитории GitHub есть папка в ветке под названием «моя ветка», и ее нужно удалить. Это не последний коммит.

Детали выпуска:

  1. создал ветку мастера, назовем ее «моя ветка».
  2. проделал некоторую работу в «моей ветке», включая обновление, включающее каталог кеша (.angular/cache/...).
  3. запустил эти команды - git add. ; git commit -m "какое-то сообщение"; Голова источника git push
  4. отправка не удалась, так как файлы были слишком большими для git.
  5. понимая, что папка не должна была быть перемещена в первую очередь, я обновил .gitignore и сделал последующую отправку (git add .gitignore; git commit -m "добавлен /.angular/cache to .gitignore"; git push origin head)
  6. Проблема в том, что история «моей ветки» по-прежнему содержит каталог «/.angular/cache», и я столкнулся со сканером безопасности бота, который сказал, что папка все еще находится в каком-то коммите (84bd63...).
  7. Я попытался запустить инструмент «bfg-repo-cleaner», чтобы полностью удалить эту папку из истории, но не смог нажать, поскольку ветки разработки и мастера защищены.
  8. Теперь я вижу, что папка все еще подхватывается сканером ботов, но над ней написано, что файл не принадлежит ни к какой ветке.

Желаемый результат:

  1. Удалите папку из истории «моей ветки», не трогая другие ветки или мастера.
  2. Ветки «Мастер» и «Развитие» защищены, и у меня нет доступа для записи в них напрямую, поэтому «bfg-repo-cleaner» не удалось нажать.

ПОЖАЛУЙСТА ПОМОГИ

develop and master branches are protected. является ли проблемный коммит в одной из этих веток? Предполагая, что это не имеет значения (и означает, что все, что вы сделали, не сработало — это не то, что было нужно). Пожалуйста, отредактируйте вопрос, чтобы уточнить
AD7six 24.11.2022 20:54

Отвечает ли это на ваш вопрос? Как убрать/удалить большой файл из истории коммитов в репозитории Git? (не забудьте принудительно нажать только на my-branch)

AD7six 24.11.2022 20:55
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
134
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если ветка прямая (по крайней мере, с момента добавления этой директории), то исправить довольно просто

git rebase -i the-commit-where-the-directory-was-added~ # do _not_ skip the pig tail, it has to biñe there
# the commit should be the first in tbe list
# change pick for edit in that commit only
# save exit
# rebase will stop right after applying that commit
git rm --cached the-directory
# consider adding the directory to .gitignore and add it also so it's not added by mistake later
git commit --amend --no-edit
git rebase --continue

Когда он закончит работу, у вас должна быть ветка без каталога

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