발생 배경
팀 프로젝트에서 사용 중인 supabase key 값이 포함된 파일이 커밋, 푸시가 된 상태에서 pr, merge가 완료 된 불상사가 발생했다.
merge가 된 파일을 각자 local 기능브랜치에 pull을 받으면서 각 브랜치에도 merge된 commit 기록이 생겼고,, 뒤늦게 발견했다.
🚨문제
PR은 Revert되어 해결했으나 각자 개인브랜치에 로컬에서 머지한 커밋 기록이 생겼고 해당 커밋에서 문제의 파일을 확인할 수 있었다.
❓원인
이번 프로젝트에서는 pr 규칙을 크게 설정하진 않고 화면공유를 해서 개인이 pr을 올리면 직접 merge 승인까지 했었다보니, 서로의 코드를 꼼꼼하게 살펴보지 않았던 것이 원인이었던 것 같다.
✅ 해결방법
모든 커밋에서 특정 파일을 제거하고 커밋을 재작성하는 명령어를 활용하였다.
1. git filter-branch 명령어
$ git filter-branch -force --index-filter 'git rm --cached --ignore-unmatch <파일 경로>' --prune-empty -- --all
2. 원격 저장소에 강제 Push
$ git push origin --force --all
프로젝트 레퍼지토리에 적용
1. 해당 명령어 입력 전 작업하고 있던 코드들 백업하기
2. 터미널에 명령어 입력
// 1
git filter-branch -f --index-filter "git rm --cached --ignore-unmatch supabaseClient.ts" --prune-empty -- --all
// 2
git filter-branch -f --index-filter "git rm --cached --ignore-unmatch ./src/app/supabaseClient.ts" --prune-empty -- --all
3. 원격 저장소에 강제 Push
// git push origin <브랜치이름> --force
git push origin feat/review --force
명령어 실행 후 원격의 해당 커밋에서 파일이 제거된 것을 정상적으로 확인할 수 있었다.
🥹 느낀점
이번 프로젝트 동안 민감한 키 노출, 파일 손상 등 깃 협업 관련 이슈가 많았는데 팀원들과 하나씩 해결하며 처음 접하는 명령어들도 사용해보게 되었다. 이번 경험을 통해서 협업 시 왜 코드에 대한 리뷰가 되어야 승인을 하는지, 리뷰 미작성 시 merge 비활성화 등 프로젝트 시작 초기에 팀원들과 소통해서 규칙을 잘 수립하고 시작하는 것의 중요성을 깨닫게 되었고 앞으로도 문제가 발생했을 때 덜 당황하고 의연하게 대처할 수 있을 수 있는 경험치를 쌓은 것 같다.
참고
https://edykim.com/ko/post/git-log-p-view-a-single-change-history-of-a-file/
https://gist.github.com/qweasd147/1a472e8bdb3a77d8a92d9b1e64299178
https://developheo.com/githube-jalmos-olrin-pail-hiseutoriggaji-sagjehagi/
'TIL' 카테고리의 다른 글
git stash (0) | 2024.10.17 |
---|---|
Vercel 배포 오류 Error: Command "yarn run build" exited with 1 (0) | 2024.10.16 |
supabase response data type (0) | 2024.10.14 |
TypeError: Cannot read properties of undefined (reading 'Geocoder') (0) | 2024.10.11 |
ERD (Entity Relationship Diagram) (3) | 2024.10.10 |