꽤 시간이 지나고서야 글을 쓰게 되었는데,
멋사에서 html+css 팀프로젝트를 마치고 제출을 한지 얼마 지나지 않아 운영진 측에서 연락이 왔다..
이유는 리드미에 포함된 노션링크 하나가 개별 페이지가 아니라 여러 depth를 거친 링크로, 다른 내부정보들을 외부인이 볼 수 있어서 리드미와 그 기록을 수정해달라는 요청이었다.
깃은 변경 이력을 추적하고 모든 커밋을 영구적으로 저장하기 때문에 커밋을 삭제하기는 어려운 것으로 알고 있어서 해결하는데 시간이 좀 걸렸는데, 그 해결방법을 공유하고자한다.
GIT에서 일부 파일의 모든 기록을 날리기
이미 push한 파일들을 되돌리거나, 없애는 방법은 생각보다 간단할 수 있다.
reset이나 push -f 등을 이용하여 되돌리는 방법이 있지만, 앞의 방법들은 히스토리에는 남기 마련이다.
이와는 다른 방법으로 일부 파일의 기록을 커밋 히스토리에서까지 지워보려고 한다.
예시로 아래와 같은 저장소에서, README.md에 대한 기록을 완전히 지워볼 것이다.



방법
1. 캐시 삭제 상태 반영
git rm -r --cached .
git add .
git commit -m "rm cache"
git push origin main
2. README.md 전체 삭제(파일뿐만 아니라 히스토리 날리기)
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch ./README.md' --prune-empty --tag-name-filter cat -- --all
3. 로컬저장소와 원격저장소 일치시키기
git fetch
4. 따로 복사해놨던 README 파일 추가 및 원격저장소에 강제 push
git push --force origin main
결과

사진으로 설명이 부족할 수 있지만, 기존 커밋 히스토리와 비교해보면 Readme.md관련 내용이 전부 삭제되었고, 작업하면서 새로 추가된 Readme.md에 관한 내용만 남아있는 모습을 볼 수 있다.
주의사항


- 데이터 유실 가능성: git filter-branch를 사용하여 커밋을 재작성하면, 히스토리에서 원하는 파일 또는 커밋을 삭제하거나 변경할 수 있습니다. 이로 인해 데이터 유실의 위험이 있으므로 신중하게 사용해야한다. 재작성 작업을 실행하기 전에 원본 저장소의 백업을 만들어두는 것이 좋다.
- 협업에 영향을 줄 수 있음: 이미 원격 저장소와 공유된 커밋이 있는 경우, git filter-branch로 커밋을 재작성하면 원격 저장소와 동기화에 문제가 발생할 수 있다. 재작성된 커밋이 다른 사람들과 공유되고 있는 커밋과 다를 수 있으므로 주의해야한다. 협업하는 경우, 팀원들과의 커뮤니케이션을 통해 재작성 작업에 대해 논의하고 협의하는 것이 좋다.
- 브랜치 및 태그 재지정: git filter-branch 명령은 기존의 브랜치와 태그를 수정하여 재작성된 커밋을 반영한다. 따라서 재작성 후에는 원하는 브랜치 또는 태그가 올바르게 가리키도록 다시 지정해주어야한다.
- 실행 시간과 작업량: git filter-branch 명령은 히스토리의 모든 커밋을 순회하고 재작성하는 작업을 수행한다. 작업량이 많은 저장소의 경우 실행 시간이 오래 걸릴 수 있으므로 유의해야한다.
참고 사이트
[GitHub에 이미 올린 파일 history에서 삭제하기
프로젝트를 하면서 GoogleService-Info.plist 파일을 그대로 올려두었는데, 더이상 깃헙에 노출되지 않도록 숨겨보자! (+History에서도 삭제하기 ⭐️⭐️⭐️)
꽤 시간이 지나고서야 글을 쓰게 되었는데,
멋사에서 html+css 팀프로젝트를 마치고 제출을 한지 얼마 지나지 않아 운영진 측에서 연락이 왔다..
이유는 리드미에 포함된 노션링크 하나가 개별 페이지가 아니라 여러 depth를 거친 링크로, 다른 내부정보들을 외부인이 볼 수 있어서 리드미와 그 기록을 수정해달라는 요청이었다.
깃은 변경 이력을 추적하고 모든 커밋을 영구적으로 저장하기 때문에 커밋을 삭제하기는 어려운 것으로 알고 있어서 해결하는데 시간이 좀 걸렸는데, 그 해결방법을 공유하고자한다.
GIT에서 일부 파일의 모든 기록을 날리기
이미 push한 파일들을 되돌리거나, 없애는 방법은 생각보다 간단할 수 있다.
reset이나 push -f 등을 이용하여 되돌리는 방법이 있지만, 앞의 방법들은 히스토리에는 남기 마련이다.
이와는 다른 방법으로 일부 파일의 기록을 커밋 히스토리에서까지 지워보려고 한다.
예시로 아래와 같은 저장소에서, README.md에 대한 기록을 완전히 지워볼 것이다.



방법
1. 캐시 삭제 상태 반영
git rm -r --cached .
git add .
git commit -m "rm cache"
git push origin main
2. README.md 전체 삭제(파일뿐만 아니라 히스토리 날리기)
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch ./README.md' --prune-empty --tag-name-filter cat -- --all
3. 로컬저장소와 원격저장소 일치시키기
git fetch
4. 따로 복사해놨던 README 파일 추가 및 원격저장소에 강제 push
git push --force origin main
결과

사진으로 설명이 부족할 수 있지만, 기존 커밋 히스토리와 비교해보면 Readme.md관련 내용이 전부 삭제되었고, 작업하면서 새로 추가된 Readme.md에 관한 내용만 남아있는 모습을 볼 수 있다.
주의사항


- 데이터 유실 가능성: git filter-branch를 사용하여 커밋을 재작성하면, 히스토리에서 원하는 파일 또는 커밋을 삭제하거나 변경할 수 있습니다. 이로 인해 데이터 유실의 위험이 있으므로 신중하게 사용해야한다. 재작성 작업을 실행하기 전에 원본 저장소의 백업을 만들어두는 것이 좋다.
- 협업에 영향을 줄 수 있음: 이미 원격 저장소와 공유된 커밋이 있는 경우, git filter-branch로 커밋을 재작성하면 원격 저장소와 동기화에 문제가 발생할 수 있다. 재작성된 커밋이 다른 사람들과 공유되고 있는 커밋과 다를 수 있으므로 주의해야한다. 협업하는 경우, 팀원들과의 커뮤니케이션을 통해 재작성 작업에 대해 논의하고 협의하는 것이 좋다.
- 브랜치 및 태그 재지정: git filter-branch 명령은 기존의 브랜치와 태그를 수정하여 재작성된 커밋을 반영한다. 따라서 재작성 후에는 원하는 브랜치 또는 태그가 올바르게 가리키도록 다시 지정해주어야한다.
- 실행 시간과 작업량: git filter-branch 명령은 히스토리의 모든 커밋을 순회하고 재작성하는 작업을 수행한다. 작업량이 많은 저장소의 경우 실행 시간이 오래 걸릴 수 있으므로 유의해야한다.
참고 사이트
[GitHub에 이미 올린 파일 history에서 삭제하기
프로젝트를 하면서 GoogleService-Info.plist 파일을 그대로 올려두었는데, 더이상 깃헙에 노출되지 않도록 숨겨보자! (+History에서도 삭제하기 ⭐️⭐️⭐️)