Git | GitLab

특정 Commit History 삭제

비번변경 2021. 5. 26. 22:04

아무리 조심한다고 한들 살다 보면 민감정보가 포함된 내용을 commit/push 하는 경우가 종종 있기 마련이다.

이미 원격 저장소에 푸시를 완료한 상황이라면 파일 내용을 수정해봐야 commit history에는 여전히 정보가 남아있기 때문에,

아예 해당 커밋을 푸시한 이력이 없던 버전으로 원격 저장소의 상태를 돌려놓아야 한다.

이 글은 커밋 히스토리에서 잘못 커밋/푸시한 파일을 삭제하는 방법을 다룬다.

 

방법

1. 클론받은 레포지터리로 이동한다.

로컬 레포지터리 이동

2. 브랜치 재작성

필터링을 이용해 적용된 파일만 가지고 히스토리를 재구축한다.

git filter-branch --force --index-filter \
"git rm --cached --ignore-unmatch '<FILE_PATH>'" \
--prune-empty --tag-name-filter cat -- --all
# --index-filter : 원하는 파일로 분리
# --prune-empty : 특정 커밋에 있는 파일 삭제로 인한 빈 커밋 삭제
# --tag-name-filter : 태그 이름 재작성. 

--tag-name-filter 옵션에 cat 명령을 주면, 단순 태그 업데이트를 실행한다.

FILE_PATH는 commit history에서 제외할 파일의 경로를 준다. 레포지터리 홈 경로로부터의 경로를 설정하면 된다.

 

3. 커밋 히스토리 확인

git log

 

4. 원격 저장소에 강제 푸시

git push origin --force

로컬 레포지터리의 버전이 원격 저장소보다 이전 버전이기 때문에 --force 옵션을 주지 않으면 푸시가 불가능하다.

 

푸시가 완료되면 정상적으로 커밋 히스토리가 지워졌는지 확인하도록 한다.