Git에서 파일 완전 삭제하기

롱롱·2022년 12월 4일
0

github

목록 보기
1/1
post-thumbnail

DB정보나 중요한 설정 파일 등을 실수로 올려서, git의 commit history에서까지 완전히 지우고 싶을 때 사용합니다.


  1. 먼저, 모든 commit에서 특정 파일을 찾아내어 삭제합니다.
git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch [지우고 싶은 특정 파일의 경로]" HEAD

  1. 그리고 나서, 원격지에 push해주면 끝입니다.
git push origin --force --all

만약, 지우고 싶은 파일이 또 있거나, 이미 backup이 있다고 뜨는 경우, 다음과 같이 실행해주면 됩니다.

git update-ref -d refs/original/refs/heads/[현재 backup이 있는 브랜치 이름]



예를 들어 master 브랜치에서 a.java 파일과 b.java 파일을 지우고자 하는 경우, 다음과 같이 실행합니다.

git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch ./src/main/resources/a.java" HEAD

git push origin --force --all

git update-ref -d refs/original/refs/heads/master

git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch ./b.java" HEAD

git push origin --force --all

결과적으로,
Github에서 지금까지 해당 파일들이 포함되었던 commit의 메세지는 보이지만,
파일 자체는 삭제 전 모습도 보이지 않도록 처리됩니다.


참고로, git push origin 에서 force를 해주지 않으면 commit 메세지들이 중복되어 두 배로 늘어날 수 있으니 주의해야 합니다.

1개의 댓글

comment-user-thumbnail
2022년 12월 14일

우와 대박

답글 달기