레포에 .env 를 .gitignore에 넣는 걸 깜빡하고 두 커밋 전에 그냥 커밋해버렸습니다. AWS 키랑 DB 비번이 들어있어요. 이미 원격(회사 gitlab)에 push까지 된 상태입니다 😭
일단 git rm --cached .env 하고 .gitignore에 추가해서 새 커밋으로 지우긴 했는데, 생각해보니 이러면 최신 커밋에서만 없어지고 예전 커밋 히스토리에는 그대로 남는 거잖아요. 실제로 두 커밋 전으로 checkout 하니 파일이 그대로 있습니다.
히스토리 전체에서 그 파일을 아예 없던 것처럼 지우고 싶은데, filter-branch 를 쓰라는 글도 있고 BFG 를 쓰라는 글도 있어서 뭐가 맞는지 모르겠습니다. 협업 중인 브랜치라 다른 팀원 두 명도 이 레포를 클론해 쓰고 있어요.
댓글 2
그 다음이 히스토리 정리인데, 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 포함)이 다시 살아나서 헛수고가 돼요. 팀원들한테 먼저 공지하고 다 같이 시간 맞춰서 하세요.