때는 오늘 새벽...다급한 연락이 왔다.
누군가 올려서는 안 될 파일을 git에 올렸다는 것...
설마설마 하고 봤더니, 영화 api의 키와 시크릿이 다 올라가 있었다 ㅠㅋㅋㅋ
그래서 해당 파일을 지우고, 내역도 함께 삭제 하기 위해 이곳저곳 서칭하다 찾은 방법...
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch 파일경로' --prune-empty -- --all
git filter-branch
Git의 명령어 중 하나로, 지정된 조건에 맞는 커밋들을 재작성
--force
필터링 작업을 강제로 실행하는 옵션으로 이미 작업한 내용이 있다면 덮어씀
--index-filter
각 커밋을 재작성할 때 실행할 명령어를 지정하는 옵션
git rm --cached --ignore-unmatch 파일경로
해당 경로의 파일을 모든 커밋에서 삭제
--cached
인덱스(Staging Area)에서만 삭제하고, 실제 작업 디렉토리에서는 삭제하지 않음 (중요)
--ignore-unmatch
파일이 존재하지 않아도 오류를 발생시키지 않고 계속 진행
--prune-empty
필터링 후 생성된 빈 커밋(모든 변경 사항이 삭제된 경우)을 제거하는 옵션
-- --all
필터링 대상으로 모든 브랜치의 커밋 히스토리를 지정 (모든 브랜치 적용)
원격저장소의 작업 파일은 지키되 파일과 히스토리에서 application만 삭제하기 위해 사용했다!
참고로 해당 명령어 이후에 git push origin --force --all
로 강제 푸시를 해야지만 적용되니 꼭 강제 푸시 갈기기! (물론, 안전한 진행을 위해 브랜치 복사도 잊지 말자.)
퍼가요 ~~