본문 바로가기
Linux

Github - 파일 히스토리까지 완전 삭제 하기(reset, revert)

by 올엠 2024. 2. 29.
반응형

Github을 사용하다보면 부주의하게 중요한 파일(토큰 정보, 인증 정보)을 실수로 올리는 상황이 발생한다.

이때 서버의 히스토리까지 완전히 삭제해야 하기 때문에 일반적인 삭제 방법으로는 어려울 수 있다.

그래서 여기에서는 파일을 삭제하는 방법에 대해서 얘기해 보도록 하겠다.

상황은 보통 commit만 하고 아직 merge를 하지 않은 상황이나 이미 머지를 완료하였다 하더라도 동일하게 적용이 가능하다.

그럼 먼저 reset, revert 방법이다.

1. 리셋, 되돌리기(reset, revert)

reset은 가장 쉬운 방법으로, 원격 레포스토리지에 적용한 commit을 초기화 하는 것이 가능하다.

아래 명령을 이용하면, 현재 가장 마지막에 커밋된 내용을 되돌려 준다.

git reset HEAD^

아래와 같이 reset을 통해 적용이 취소된 내용을 볼 수 있으며, 실수로 커밋한 내용이 모두 취소되었다면, 

push 명령을 이용해서 적용을 하면 된다. --force를 붙여야 강제로 적용이 가능하다.

git push origin --force --all

다만 reset은 여러사람이 작업할 때에는 혼란을 줄 수 있으므로, 현재 레포스토리지 상태를 보고 작업하기를 권장한다.

즉 자신이 작업한 commit만 제거가 가능한 상황에서 사용이 가능하다.

revert는 reset 보다 안전하다고 하지만, 실제로 삭제 흔적이 남기 때문에 중요파일에서는 추천하지 않는다. 바로 직전으로 되돌리는 명령이다.

git revert HEAD

이후 원격 저장소에 push 명령으로 적용하면 된다.

2. 특정 파일 삭제(git filter-branch)

이 방법은 커밋 단위를 제거하는것이 아닌, 해당 파일만 삭제하는 것이다.

히스토리까지 삭제해야 하기 때문에 명령이 길지만, 다수의 작업으로 커밋은 유지해야 하는 상황이라면, 시도해볼 수 있다.

git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch *.conf' --prune-empty --tag-name-filter cat -- --all

 

push를 통해 원격 저장소에 전달하면 해당 파일이 삭제된다. 

git push origin --force --all
 
반응형