# Git 컨벤션 ## 커밋 메시지 `(): <제목>` 형식 — scope 는 선택. - type: **feat / fix / refactor / docs / chore / perf / test / style** - scope: 변경이 한 스택에 한정되면 명시 — `backend` / `frontend` / `flutter` / `docker` / `rules` - 제목은 한국어, 명령형 현재 시제, 마침표 없음 - 한 커밋은 하나의 논리적 변경만 포함 ``` feat(backend): 사용자 목록 커서 페이지네이션 추가 fix(frontend): 세션 만료 시 중복 알림 노출 수정 docs(rules): 에러 코드 SSOT 동기화 절차 정리 ``` 본문이 필요하면 제목 다음 줄을 비우고 **왜** 바꿨는지 적는다(무엇을 바꿨는지는 diff 가 말해준다). ## 브랜치 `/<간단한-설명>` — 기본 브랜치는 `main`. ``` feat/user-pagination fix/session-expired-alert ``` - 기본 브랜치에 직접 커밋하지 않는다. 작업은 브랜치에서 하고 PR 로 합친다. - 브랜치는 머지 후 삭제한다. 오래 유지되는 브랜치를 만들지 않는다. ## PR - 제목은 커밋 규칙과 동일한 형식 - 본문에 **무엇을 왜 바꿨는지**와 **확인 방법**을 적는다 - `.github/pull_request_template.md` 의 체크리스트를 채운다 - 머지 전 CI(`.github/workflows/ci.yml`)와 [[checklist]] 의 "커밋 전 공통 점검"을 통과해야 한다 - 에러 코드·응답 포맷 등 **공유 계약을 바꾸는 PR** 은 세 스택 영향 범위를 본문에 명시한다 ([[error-codes]] · [[response-format]])