본문 바로가기
버전 관리 시스템 (VCS)/Git

[Git/Github] 깃허브의 특정 파일을 모든 히스토리에서 제거하기

by lody.park 2024. 7. 1.

github로 버전 관리를 하다보면 이슈가 될 만한 파일들(노출하면 안될 파일, 협업에 충돌을 야기할 수 있는 파일 등)을 실수로 올린 것을 깨닫고 당황할때가 있다.

 

당황하지말고 얼른 해당 파일들을 흔적도 없이 지워야한다.


모든 히스토리에서 파일을 제거하고 그 흔적까지 완전히 없애려면, git-filter-repo 유틸리티를 사용하는 것이 가장 편하다.

우선 로컬 저장소에서 히스토리를 모두 제거하는 작업을 수행한 후, 원격 저장소에 강제로 푸시해야한다.

 

1. git-filter-repo 설치하기

brew install git-filter-repo

 

2. 파일 제거

git filter-repo --path <삭제하려는 파일 경로> --invert-paths --force

 

저장소의 히스토리를 재작성하게 된다.

 

브랜치의 트래킹 정보가 손실될 수 있다.

이를 복구하기 위해서는 로컬 브랜치를 원격 브랜치에 연결해주어야한다.

 

다음 단계를 따라 진행해야한다.

 

3. 원격 저장소 다시 트래킹하기

3.1. 원격 저장소 URL 확인.

먼저 현재 설정된 원격 저장소 목록을 확인한다.

git remote -v

 

3.2. 원격 저장소 설정.

설정된 원격 저장소 목록에 origin이 없거나 잘못 설정된 경우, 올바른 URL로 다시 설정해야한다.

git remote add origin <github 원격 저장소>

 

3.3. 원격 저장소 정보 가져오기

git fetch origin

 

3.4. 현재 작업중인 로컬 브랜치 정보를 확인

git branch

 

3.5. 로컬 브랜치와 원격 브랜치 연결.

git branch --set-upstream-to=origin/<원격 현재 작업하려는 브랜치> <로컬 현재 작업하려는 브랜치>

 

4. 변경 사항 강제 푸시

git push origin --force --all

 

* 로컬 브랜치들을 모두 지우고 원격 브랜치에서 다시 받아오려면

git branch | grep -v "^*" | grep -v <남길 브랜치> | xargs git branch -D
git pull