[GIT] Commit History 모든 파일 삭제하기

반응형

상황

넌 추적되지 말았어야 했어

GIT 을 쓰다보면, 나도 모르게 추적되고 있던 파일들이 있을 수 있다.

대표적으로 config.json 과 같이 DB 접속 정보(ID, PW) 등이 담겨있다거나, 심지어는 key 가 git history 상에 올라가 있는 경우가 있다.

뒤늦게 해당 파일을 .gitignore 에 추가시켜 track 을 피해보지만,

그동안의 commit history 상에 config.json 과 같은 파일들이 올라가 있어서,

누구나 과거의 commit 으로 checkout 만 하면 숨겨져야할 내용을 열람할 수 있게 된다.

해결 방법

결론부터 말할게

filter-branch 라는 명령어를 사용하면, 우리가 원하는 파일을 삭제할 수도, 변경할 수도 있다.

그것도 모든 commit 에서 한번에!

(아래 하이라이트 된 password.txt 는 폴더가 될 수도 있다.)

현재 branch 의 모든 history 에 대해 commit 된 파일 제거

$ git filter-branch --tree-filter 'rm -f passwords.txt' HEAD

모든 branch 의 history 에 대해 commit 된 파일 제거

$ git filter-branch --force --index-filter /

'git rm --cached --ignore-unmatch passwords.txt' /

--prune-empty --tag-name-filter cat -- --all

적용사항 확인

현재 위치한 commit 의 대상파일 확인(추적대상 확인)

$ git ls-tree -r HEAD

해당 브렌치의 추적사항 (마지막 커밋을 기준으로)

$ git ls-tree -r master

자세한 설명은 아래에서

filter-branch 에 대해서는

자세한 내용은 링크 를 참고하자. (git-scm.com)

Reference

http://better-today.tistory.com/22 [간단하게]

http://minsone.github.io/git/github-advanced-remove-sensitive-data [자세하게, 민감한 데이터 제거하기, 원격저장소 관리까지]

반응형

Designed by JB FACTORY