less than 1 minute read

목표

비밀번호, 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>

참고

Tags:

Categories:

Updated:

Leave a comment