개발일지/TIL(Today I Learned)

2024-12-17

프린스 알리 2024. 12. 17.

GitHub에 올라간 .env 파일 지우기

.gitignore를 써도 .env 파일이 제대로 제외되지 않을 때가 있다. 처음엔 오류인 줄 알았는데 구글링을 해보고 나서야 깨달았다. .env파일이 이미 원격 저장소에 푸시가 되어있는 상황이면 원격 저장소가 .env를 계속 추적한다고 한다. 그렇다면 이미 잘못 커밋된 상황을 어떻게 되돌릴 수 있을까?

 

먼저 .env가 추적되지 않도록 원격에서 해당 파일을 지워야 한다. 이때 git rm이란 명령어를 사용한다.

git rm .env --cached
git commit -m "remove .env file from git repo"
git push

 

하지만 이 방법만으론 한계가 있다. 파일은 지워졌지만 이전에 커밋한 기록은 남아있기 때문이다.

DB 비밀번호라도 유출된다면 걷잡을 수 없다...!

 

이럴 땐 커밋기록과 레포지토리 히스토리 모두를 지워줘야 한다. 아래와 같은 방법을 사용해보자.

// 파일 삭제 
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 저장소에서 원하는 커밋 확인하기

  1. GitHub에서 돌아가고 싶은 커밋의 해시값(commit hash) 을 확인한다.

  2. 로컬 저장소에서 아래 명령어로 해당 커밋의 로그를 확인할 수도 있다:

commit 다음에 있는 게 해시값이다.

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

댓글