프로젝트 중 각종 key와 비밀번호 정보가 포함된 config.py 파일을 깃허브에 푸쉬해놓고
레파지토리를 private으로 해놨었는데, 해당 레파지토리를 다시 public 으로 바꾸려니 gitignore에 추가 뿐 아니라
history에 해당 파일의 정보가 남아있어서, history 까지 삭제해야했다.
그래서 이 포스팅엔 파일 및 히스토리를 삭제하기 위해 내가 진행한 과정을 남기려 한다.
1. .gitignore 파일에 config 파일을 추가하려면, 파일 이름을 입력하고 줄 바꿈으로 구분합니다.
config.py
2. .gitignore 파일을 저장하고 Git에 추가합니다.
git add .gitignore
3. 변경 사항을 커밋합니다.
git commit -m "Add config.py to .gitignore"
이제 Git은 config.py 파일을 추적하지 않습니다. 이 파일은 깃허브에 푸시되지 않으며, 다른 사용자들이 이 파일을 볼 수 없습니다.
4. 이미 config.py 파일이 깃허브에 푸시된 경우, 이 파일을 Git 기록에서 삭제해야 합니다.
git rm --cached config.py
git commit -m "Remove config.py from Git tracking"
git push
여기서부터는 히스토리에서 삭제하는 방법입니다.
문제가 생길 수 있으니 이 작업을 수행하기 전에, 모든 변경 사항을 커밋하고 레파지토리를 백업하세요.
1. 레파지토리에 있는 모든 브랜치를 가져옵니다.
git fetch --all
2. 히스토리를 수정할 브랜치로 이동하세요 (여기선, main 브랜치로 이동)
git checkout main
3. git filter-branch를 사용하여 파일을 제거합니다.
git filter-branch --force --index-filter "git rm --cached --ignore-unmatch ./config.py" --prune-empty --tag-name-filter cat -- --all
이 명령은 현재 위치의 config.py 파일을 모든 커밋에서 제거합니다.
--ignore-unmatch 뒤에 파일 경로를 써주면 되는데, C:/Users 로 시작하는 절대 경로를 입력하니 동작하지 않았습니다.
./ 을 사용한 상대경로를 쓰니 잘 동작했습니다.
4. 필터링된 브랜치를 원격 레파지토리에 강제 푸시합니다. 이 작업은 깃 히스토리를 덮어쓰므로 주의하세요.
git push origin --force --all
5. (선택 사항) 태그가 있는 경우에는 다음 명령어를 실행하여 리모트 태그도 강제로 푸시하세요.
git push origin --force --tags
'Git' 카테고리의 다른 글
.gitignore에서 파일을 해제하고 다시 Git 추적에 등록하기 (0) | 2023.03.31 |
---|---|
특정 프로젝트에 있는 파이썬 패키지만 requirements.txt 로 만들기 - pipreqs (0) | 2022.12.23 |
GitHub Actions를 이용한 EC2 서버 CI/CD (0) | 2022.12.20 |
GitHub 사용 방법 - Commit, Push, Pull (0) | 2022.12.12 |
GitHub 사용 환경 구축하기(2) - Visual Studio Code 연동 (0) | 2022.12.12 |