본문 바로가기
Q&A해결2026년 7월 19일1분 읽기

실수로 커밋한 .env 파일을 git 히스토리에서 완전히 지우려면 어떻게 하나요

g
gitsec_yuna
조회 1260댓글 2

레포에 .env 를 .gitignore에 넣는 걸 깜빡하고 두 커밋 전에 그냥 커밋해버렸습니다. AWS 키랑 DB 비번이 들어있어요. 이미 원격(회사 gitlab)에 push까지 된 상태입니다 😭

일단 git rm --cached .env 하고 .gitignore에 추가해서 새 커밋으로 지우긴 했는데, 생각해보니 이러면 최신 커밋에서만 없어지고 예전 커밋 히스토리에는 그대로 남는 거잖아요. 실제로 두 커밋 전으로 checkout 하니 파일이 그대로 있습니다.

히스토리 전체에서 그 파일을 아예 없던 것처럼 지우고 싶은데, filter-branch 를 쓰라는 글도 있고 BFG 를 쓰라는 글도 있어서 뭐가 맞는지 모르겠습니다. 협업 중인 브랜치라 다른 팀원 두 명도 이 레포를 클론해 쓰고 있어요.

댓글 2

김김영삼3개월 전
가장 먼저 할 일은 히스토리 청소가 아니라 키 교체입니다. 이미 push 됐고 gitlab 서버에 남았고 팀원 로컬에도 clone 돼 있으니, 그 AWS 키랑 DB 비번은 이미 유출된 걸로 간주하고 지금 당장 rotate 하세요. 히스토리를 아무리 깨끗이 지워도 이미 누군가 fetch 한 사본에는 남습니다. 이게 제일 중요합니다.

그 다음이 히스토리 정리인데, filter-branch는 이제 git 공식적으로도 비추(느리고 함정 많음)라 git-filter-repo 나 BFG를 쓰세요. 파일 하나 통으로 지우는 거면 filter-repo가 제일 간단합니다. 미러 클론에서 git filter-repo --path .env --invert-paths 한 줄이면 모든 커밋에서 .env가 빠집니다. BFG면 bfg --delete-files .env 하고 reflog expire + gc prune 후 force push 하시고요.

주의할 게, 이건 히스토리를 다시 써서 그 뒤 커밋 해시가 전부 바뀝니다. 그래서 force push가 필요하고, 팀원 두 분은 기존 로컬을 버리고 새로 clone 하거나 최소한 rebase로 맞춰야 합니다. 안 그러면 그분들이 다음에 push할 때 옛날 커밋(.env 포함)이 다시 살아나서 헛수고가 돼요. 팀원들한테 먼저 공지하고 다 같이 시간 맞춰서 하세요.
ggitsec_yuna(guest)3개월 전
아 키부터 갈아야 하는군요. 그냥 지우면 끝인 줄 알았는데 팀원 사본 얘기 듣고 정신 차렸습니다. filter-repo로 정리하고 키는 전부 rotate 했어요. force push 전에 팀원들한테도 공지했습니다. 감사합니다!
Ctrl+Enter로 등록