개발을 하다 보면 실수로 용량이 너무 큰 데이터 폴더나, 보안상 민감한 파일(DB 정보, 사용 중인 데이터셋 등)을 GitHub에 푸시하는 경우가 간혹 발생합니다.
단순히 git rm 명령어로 파일을 지우고 커밋을 해도 과거의 커밋 내역에는 해당 파일이 그대로 남아있어 정보가 노출될 위험이 있습니다.
비슷한 케이스가 발생하여 Git 공식 권장 도구인 git filter-repo를 사용하여 특정 폴더나 파일의 기록을 Git 히스토리에서 영구적으로 제거하는 방법을 정리하였습니다.
[주의사항]
만약 헙업 중인 프로젝트라면 해당 작업 수행한 후 다른 팀원들은 기존 로컬 저장소를 지우고 새로 clone을 받아야 하므로 반드시 팀원들에게 사전 공지 후 진행하셔야합니다..!
pip install git-filter-repo
# MacOS
brew install git-filter-repo
2번 실행 전 꼭 지금 진행했던 내용 푸시하시고, git clone으로 백업해두셔야합니다.
git filter-repo --path dir_name/ --invert-paths --force
git filter-repo --path requirements.txt --invert-paths --force
git remote add origin https://github.com/본인계정/레포지토리이름.git
git push origin main --force
이제 GitHub 레포지토리에 들어가서 커밋 기록을 확인해 보시면 지우려했던 했던 폴더나 파일에 대한 기록이 사라졌을겁니다.
이후 .gitignore 파일 내 폴더명이나 파일명 추가하여 무시되게끔 하셔야 반영됩니다.