Git 특정파일 히스토리 삭제
목표
비밀번호, DB 정보등 보안에 취약한 정보가 Repository에 공유되었을때 특정 파일만 History에서 삭제한다.
문법
git filter-branch [--setup <command>] [--subdirectory-filter <directory>]
[--env-filter <command>] [--tree-filter <command>]
[--index-filter <command>] [--parent-filter <command>]
[--msg-filter <command>] [--commit-filter <command>]
[--tag-name-filter <command>] [--prune-empty]
[--original <namespace>] [-d <directory>] [-f | --force]
[--state-branch <branch>] [--] [<rev-list options>…]
설정
git filter-branch --index-filter 'git rm --cached --ignore-unmatch <filename>' --prune-empty --force -- --all
filter-branch
: 브랜치를 재작성한다.--index-filter
: 인덱스를 다시 쓰기위한 필터입이다. 트리 필터와 비슷하지만 트리를 체크아웃하지 않으므로 훨씬 빠르다.git rm --cached --ignore-unmatch
와 같이 사용된다.filename
: 삭제할 파일이름--prune-empty
: 빈 커밋을 제거한다.--force
: git filter-branch는 강제되지 않는 한 기존의 임시 디렉토리에서 시작을 거부하거나refs/original/
로 시작 참조가 이미 존재하는 경우에 거부한다.--
: 필터 옵션과 리비전 옵션을 분리한다.--all
: 전체 브랜치를 대상
설정후
파일이 문제 없이 삭제되었다면 git update-ref
명령어를 사용해서 ref를 삭제할수 있다.
git update-ref -d <ref>
Leave a comment