GitHub에 올라간 .env 파일 지우기
.gitignore를 써도 .env 파일이 제대로 제외되지 않을 때가 있다. 처음엔 오류인 줄 알았는데 구글링을 해보고 나서야 깨달았다. .env파일이 이미 원격 저장소에 푸시가 되어있는 상황이면 원격 저장소가 .env를 계속 추적한다고 한다. 그렇다면 이미 잘못 커밋된 상황을 어떻게 되돌릴 수 있을까?
먼저 .env가 추적되지 않도록 원격에서 해당 파일을 지워야 한다. 이때 git rm이란 명령어를 사용한다.
git rm .env --cached
git commit -m "remove .env file from git repo"
git push
하지만 이 방법만으론 한계가 있다. 파일은 지워졌지만 이전에 커밋한 기록은 남아있기 때문이다.
이럴 땐 커밋기록과 레포지토리 히스토리 모두를 지워줘야 한다. 아래와 같은 방법을 사용해보자.
// 파일 삭제
git filter-branch --index-filter 'git rm --cached --ignore-unmatch 파일이름' --prune-empty --force -- --all
// 디렉토리 삭제
git filter-branch --tree-filter 'rm -rf 해당폴더위치와이름(ex)frontend/src)` HEAD
//존재하는 빈 commit 삭제
git filter-branch --prune-empty -f HEAD
GitHub에 올라간 특정 커밋 버전으로 돌아가기
마지막 커밋에만 .env 파일이 올라갔을 경우엔 차라리 이전 단계로 되돌아가는 게 더 쉬울 수도 있다.
1. 현재 Git 저장소에서 원하는 커밋 확인하기
- GitHub에서 돌아가고 싶은 커밋의 해시값(commit hash) 을 확인한다.
- 로컬 저장소에서 아래 명령어로 해당 커밋의 로그를 확인할 수도 있다:
git log // 커밋한 기록을 살펴볼 수 있다. q를 누르면 종료된다.
2. 특정 커밋으로 체크아웃
특정 커밋으로 임시로 이동하려면 아래 명령어를 사용한다:
git checkout <커밋 해시>
- 이 상태에서는 분기(branch) 에 연결되지 않고, 해당 커밋의 상태를 임시로 탐색할 수 있다.
예:
git checkout abc1234def5678
2-1. 현재 상태를 브랜치로 저장하려면
특정 커밋으로 돌아간 상태에서 새로운 브랜치를 생성하려면 아래 명령어를 사용한다:
git checkout -b <새로운 브랜치 이름>
예:
git checkout -b rollback-to-version
2-2. 원래 브랜치를 되돌리려면 (완전히 덮어쓰기)
특정 커밋을 현재 브랜치의 최신 상태로 되돌리려면 아래 명령어를 사용한다:
git reset --hard <커밋 해시>
예:
git reset --hard abc1234def5678
⚠️ 주의!!
--hard 옵션은 현재 변경 사항을 삭제하므로, 꼭 저장이 필요한 변경 사항을 git stash로 임시 저장하거나 백업해야 한다. 과거 커밋으로 돌아가 강제로 push한 뒤 백업한 파일을 다시 add해서 원격저장소에 올려야 하기 때문!
3. GitHub 원격 저장소로 변경사항 강제 푸시
GitHub의 원격 저장소 상태도 되돌리려면 강제로 푸시해야 한다:
git push origin <브랜치 이름> --force
예:
git push origin main --force
'개발일지 > TIL(Today I Learned)' 카테고리의 다른 글
2024-12-19 (3) | 2024.12.19 |
---|---|
2024-12-18 (4) | 2024.12.18 |
2024-12-16 <OSI 7계층 - 네트워크 계층(IP, 서브넷 마스크, 라우터와 라우팅)> (4) | 2024.12.15 |
2024-12-13 (1) | 2024.12.13 |
2024-12-12 (0) | 2024.12.12 |
댓글