Dev/CS

[형상관리] GitHub에 잘못 PUSH한 폴더 및 파일 완전 삭제하기 (BFG 사용)

싹다배워 2026. 3. 4. 22:49
반응형

프로젝트를 진행하다가 Docker 설정 폴더를 GitHub에 실수로 Push하는 일이 발생했다.
단순히 git rm으로 삭제하면 최신 버전에서는 사라지지만, 히스토리에는 그대로 남아있다.

특히 설정 파일 안에 민감 정보(DB 계정, 내부 IP, Key 등)가 포함되어 있다면 반드시 히스토리까지 완전 삭제해야 한다.

이번 글에서는 BFG Repo Cleaner를 이용해 특정 폴더를 Git 히스토리에서 완전히 제거하는 방법을 정리한다.


1. 왜 git rm으로는 부족한가

git rm -r Docker
git commit -m "remove docker folder"
git push

위 방법은 현재 브랜치에서만 삭제된다.

하지만 Git의 과거 커밋 기록에는 Docker/ 폴더가 그대로 남아있다.

즉, 누군가 이전 커밋을 조회하면 파일을 다시 확인할 수 있다.


2. 해결 방법: BFG Repo Cleaner 사용

BFG는 Git 히스토리를 빠르게 정리해주는 도구다.
특정 파일이나 폴더를 과거 커밋에서 완전히 제거할 수 있다.


2-1. BFG 다운로드

https://rtyley.github.io/bfg-repo-cleaner/

 

BFG Repo-Cleaner by rtyley

$ bfg --strip-blobs-bigger-than 100M --replace-text banned.txt repo.git an alternative to git-filter-branch The BFG is a simpler, faster alternative to git-filter-branch for cleansing bad data out of your Git repository history: Removing Crazy Big Files Re

rtyley.github.io

bfg-x.x.x.jar 파일을 다운로드 한다.


2-2. GitHub 레포를 Mirror 모드로 Clone

git clone --mirror https://github.com/계정/레포명.git

ex) git clone --mirror https://github.com/user/github_project.git

위 명령어를 실행하면 bare repository를 생성한다.


2-3. BFG 실행 (폴더 전체 삭제)

다운로드한 bfg.jar 파일을 방금 생성된 .git 폴더 안에 넣는다.

그 후 아래 명령 실행

java -jar bfg.jar --delete-folders 폴더명 --no-blob-protection

ex) java -jar bfg.jar --delete-folders docker --no-blob-protection

옵션

--delete-folders docker : docker 폴더 전체 삭제

--no-blob-protection : 보호 옵션 무시 (완전 삭제)

- 폴더명은 대소문자를 정확하게 입력해야 한다.


2-4. Git 내부 정리 작업

BFG 실행 후에는 Git Garbage Collection을 진행해야 한다.

git reflog expire --expire=now --all
git gc --prune=now --aggressive

설명

- reflog 정리

- 삭제된 객체 완전 제거

- Git 내부 최적화


2-5. GitHub에 강제 Push

히스토리가 변경되었기 때문에 반드시 --force 옵션이 필요하다.

git push --force

협업자에게 반드시 알려줘야한다.. 히스토리가 재작성되기 때문이다.


2-6. BFG 실행 후 생성되는 폴더

작업 후 다음 폴더가 생성된다.

레포명.git.bfg-report

이 폴더는 단순 리포트 로그다. 삭제해도 무관.


3. 최종 정리

삭제해도 되는 것

레포명.git
레포명.git.bfg-report

 

유지해야 하는 것

실제 프로젝트 폴더

Git은 강력한 버전 관리 도구지만, 한 번 올라간 파일은 단순 삭제로 완전히 제거되지 않는다.

특히 설정 파일이나 Docker 환경 파일은 .gitignore로 사전에 관리하는 습관이 중요하다.

 

반응형