Ответ 1
Я нашел этот ответ, и он помог:
git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch path_to_file" HEAD
нашел здесь https://myopswork.com/how-remove-files-completely-from-git-repository-history-47ed3e0c4c35
git
.Я использую Git и Github (личный аккаунт).
В этой теме показано что-то похожее, но здесь есть старый файл, который был добавлен в функциональную ветвь, эта ветвь объединена с развитие ветки и, наконец, слился с мастером, так как это, много изменения были сделаны. Так что это не то же самое, и что нужно, это изменить историю, и скрыть эти файлы для конфиденциальности.
Я нашел этот ответ, и он помог:
git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch path_to_file" HEAD
нашел здесь https://myopswork.com/how-remove-files-completely-from-git-repository-history-47ed3e0c4c35
Если вы недавно зафиксировали этот файл, или если этот файл изменился за одну или две фиксации, я бы предложил вам использовать rebase
и cherrypick
для удаления этой конкретной фиксации.
В противном случае вам придется переписать всю историю.
git filter-branch --tree-filter 'rm -f <path_to_file>' HEAD
Если вы удовлетворены изменениями и должным образом гарантировали, что все выглядит нормально, вам необходимо обновить все удаленные ветки -
git push origin --force --all
Примечание: - Это сложная операция, и вы должны знать, что вы делаете. Сначала попробуйте сделать это в демо-репозитории, чтобы увидеть, как это работает. Вы также должны сообщить об этом другим разработчикам, чтобы они не вносили никаких изменений в это время.
удалить файл и переписать историю из коммита, который вы сделали с удаленным файлом (это создаст новый хеш коммита из файла, который вы коммитили):
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA' --prune-empty --tag-name-filter cat -- --all
Теперь принудительно подтолкните репо:
git push origin --force --all
теперь сообщите своим сотрудникам rebase
.
После этого на другой машине я сделал:
$ git pull
fatal: refusing to merge unrelated histories
$ git rebase
Сделал трюк благодаря @suhailvs