GitHub, 원격 저장소에서 원하는 파일 이전 기록까지 모두 제거하기



문제

github를 사용하다 보면 이전에 불필요한 파일이 올라갈 때가 있습니다. 이럴 때, 이전에 올라간 파일을 github에서도 제거를 하고 싶은데, 파일만 지우고 commit 을 하게 되면 이전 commit 에서 해당 문제점을 확인할 수 있습니다.

문제가 있는 파일을 모두 제거해야 하는데 이럴때에는 아래와 같은 해결 방법을 사용합니다. 기본적인 내용은 아래의 내용을 참조해서 포스팅했습니다. 저는 Git에 내장된 filter-branch툴을 사용하는 방법만 포스팅하고,다른 방법으로는 BFG Repo-Cleaner를 사용하는 방법이 있습니다. http://minsone.github.io/git/github-advanced-remove-sensitive-data

해결방법

가령 비밀번호가 들어간 파일이라던가 폴더 전체를 제거해야 하는 경우가 있습니다.

파일

$ git filter-branch --force --index-filter \
  'git rm --cached --ignore-unmatch 파일명' \
  --prune-empty --tag-name-filter cat -- --all

디렉토리

$ git filter-branch --force --index-filter \
  'git rm -r --cached --ignore-unmatch 폴더명' \
  --prune-empty --tag-name-filter cat -- --all

이렇게 되면 로컬에 있는 저장소에 있는 이전 commit 들에서 파일이나 폴더가 전부 제거됩니다.

원격 저장소에 반영하기

$ git add *
$ git commit -m "delete before files"
$ git push origin master --force

그 이후, 위와 같이 push 명령어에서 –force 를 추가하여 push 해주면 원격 저장소에서도 잘 반영됩니다.