Programming/Github

GitHub에서 commit한 보안파일 히스토리 삭제하기

YK Choi 2021. 11. 17. 04:42

Github에서 다른 사람들에게 보여주고 싶지 않은 파일들이 있을 수 있다.

 

예를 들면 google-services.json (firebase의 푸시알림을 위한 데이터가 들어가 있어서 악용하려는 사람이 있다면 앱 사용자에게 악의적인 푸시알림을 보낼 가능성이 생긴다.) 또는 signing 관련 파일, 비밀번호가 저장된 파일이 그럴 수 있다.

 

remote 에 push가 되지 않으면 베스트이지만 push된 상황에서는 이렇게 하면 된다.

 

첫번째로 ".gitignore"로 해당 파일/폴더가 github에 푸시되지 않도록 한다. 이미 푸시한 상태라면 github의 history를 통해 관련 내역을 볼 수 있기 때문에 아래와 같이 깃헙에서 완전히 삭제하는것이 안전하다.

 

두번째로 filter-branch 를 이용하여 커밋내역을 삭제한다.

폴더위치가 포함된 파일이름을 정확히 작성해야 한다. 

app -> src 폴더의 test.c 라는 파일이름을 삭제하고 싶으면 아래와 같이 하면 된다.

 

git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch app/src/test.c' --prune-empty -- --all

 

현재까지 repo에서 커밋을 많이 했다면 그 양에 비례하여 시간이 걸린다.

이후 remote에 포스푸시 하면 된다.

 

로컬 브랜치가 여러개 있다면 자식 브랜치가 같이 적용되는것 같으니 커밋 그래프를 잘 보면서 하자. 

 

커밋 그래프를 보면서, 변경할 브랜치로 체크아웃하고 원하는 커밋에 reset, force push 하면 된다.

 

 

참고한 사이트

https://donologue.tistory.com/373

 

github 잘못 올라간 파일 히스토리까지 삭제하기

잘못해서 깃허브에 암호 파일이라던지, env 파일을 올려 난감한 상황에 처할 때가 있습니다. 저도 최근 .pem 파일을 push 해서 난처한 상황에 처하고 말았는데요. 이렇게 푸시까지 이루어진 상황에

donologue.tistory.com

https://coderedirect.com/questions/205043/there-isnt-anything-to-compare-nothing-to-compare-branches-are-entirely-diffe

https://stackoverflow.com/questions/53844405/github-pull-request-there-isnt-anything-to-compare

 

Github Pull Request: There isn't anything to compare

I have a master branch, and add_db branch for a simple project. I have done all my code edits and pushes on add_db. However, I want to merge all these commits into my master branch. When I try to c...

stackoverflow.com