-
[Git] 특정 파일을 Remote에 있는 과거 commit에서까지 전부 삭제하기개발 환경 2022. 2. 6. 21:55
문제 상황
이번 게시글이 특정하는 상황은 다음과 같습니다.
기존에는
A
파일이 공개해도 되는 파일이었지만 개발을 하다 보니A
파일을 비공개로 전환할 필요가 있을 때가 있습니다.이럴 때
.gitignore
에 제외 항목으로 등록하더라도, 과거에 작성한commit
에는A
파일의 흔적이 남아있게 됩니다.또는
A
파일을 비공개로 해야 했기에 레포지토리를 private로 생성했다가, 나중에 필요에 의해 레포지토리를 public으로 변경해야 할 때가 있습니다.이 때도 역시, 기존의
commit
에 남아있는A
파일의 흔적을 지우지 못하면 public으로 전환할 수가 없습니다.이러한 상황들에서
A
파일의 흔적을 완전히 지우고 싶을 때 지금 소개해드리는 방법을 사용하시면 됩니다.파일의 흔적을 완전히 지우는 방법
일단, 첫 번째로
.gitignore
에A
파일을 기입한 뒤, remote에 푸쉬해줍니다.이렇게 하더라도 기존에 있던
A
파일은.gitignore
의 영향을 받지 않습니다. 따라서cache
를 모두 지우고 다시 커밋해주어야 합니다.git rm -r --cached . git add . git commit -m "clear git cache" git push
이제 현재 commit을 기준으로
A
파일을 완벽히 숨겼습니다.두 번째로, 이전의 모든
commit
에서A
파일을 지워줍니다.git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch <경로/.../파일명.확장자>' --prune-empty --tag-name-filter cat -- --all
제 경우에는 Firebase와 연동할 때 필요한 파일인 GoogleService-Info.plist파일에 적용했기 때문에
위의 코드에서
<경로/.../파일명.확장자>
부분만GoogleService-Info.plist
와 같이 변경하시면 됩니다.전부 삭제가 되었다면,
git push --force --all
을 통해서 remote에 적용해주시면 됩니다.
출처
hue
님의 지식보따리