Как удалить файл из истории Git?

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

Я использую Git и Github (личный аккаунт).


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

Ответ 2

Если вы недавно зафиксировали этот файл, или если этот файл изменился за одну или две фиксации, я бы предложил вам использовать rebase и cherrypick для удаления этой конкретной фиксации.

В противном случае вам придется переписать всю историю.

git filter-branch --tree-filter 'rm -f <path_to_file>' HEAD

Если вы удовлетворены изменениями и должным образом гарантировали, что все выглядит нормально, вам необходимо обновить все удаленные ветки -

git push origin --force --all

Примечание: - Это сложная операция, и вы должны знать, что вы делаете. Сначала попробуйте сделать это в демо-репозитории, чтобы увидеть, как это работает. Вы также должны сообщить об этом другим разработчикам, чтобы они не вносили никаких изменений в это время.

Ответ 3

  • удалить файл и переписать историю из коммита, который вы сделали с удаленным файлом (это создаст новый хеш коммита из файла, который вы коммитили):

    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.

Ответ 4

После этого на другой машине я сделал:

$ git pull                     
fatal: refusing to merge unrelated histories
$ git rebase

Сделал трюк благодаря @suhailvs