팀 프로젝트에서 가장 중요한 설정 중 하나입니다. main 브랜치에 아무나 직접 push하면 코드 리뷰 없이 변경사항이 합쳐지거나, 여러 명이 동시에 push하면서 충돌이 빈번해지는 문제가 생깁니다. 이를 방지하기 위해 PR을 통해서만 코드를 합칠 수 있도록 보호 규칙을 설정합니다.
설정 방법
Settings → Branches
Add branch ruleset 클릭
Ruleset name 입력 (예: main-protection)
Enforcement status를 Active로 설정
Targets → Add target → Include default branch 선택
Rules에서 Restrict deletions, Block force pushes, Require a pull request before merging 체크
Require a pull request before merging의 하위 옵션에서 Required approvals: 1, Require conversation resolution before merging 설정
Allowed merge methods를 Squash만 선택
Create 클릭
설정 후 효과main 브랜치에 직접 push하려고 하면 거부됩니다. 반드시 별도 브랜치에서 작업한 뒤 PR을 만들어 merge해야 합니다.
Rules 상세 옵션
Restrict deletions
main 브랜치가 실수로 삭제되는 것을 방지합니다.
Block force pushes
git push --force로 main의 커밋 히스토리를 덮어쓰는 것을 방지합니다.
Require a pull request before merging
main에 직접 push를 막고, 반드시 PR을 통해서만 코드를 합칠 수 있게 합니다. 체크하면 아래 하위 옵션이 나타납니다.
권장 설정
Required approvals: 1
merge 전에 최소 1명의 리뷰 승인을 요구합니다. 소규모 팀이라면, 2명 이상의 리뷰 승인은 병목이 생길 수 있습니다.
Require conversation resolution before merging
PR의 리뷰 코멘트가 모두 resolved 상태여야 merge할 수 있습니다. 피드백을 무시하고 merge하는 실수를 방지합니다.
선택 옵션 - 필요할 때 추가로 적용
Dismiss stale approvals when new commits are pushed
승인 이후 코드가 변경되면 다시 리뷰를 요구합니다.
Require approval of the most recent reviewable push
본인이 올린 코드를 스스로 승인하는 것을 방지합니다.
Require review from Code Owners
특정 파일에 대해 담당자 리뷰를 강제합니다. CODEOWNERS 파일을 별도로 작성해야 합니다.
Allowed merge methods → Squash만 선택
브랜치의 커밋들을 하나로 합쳐서 merge합니다. 작업 중 생긴 "오타 수정", "다시 수정" 같은 커밋이 main에 노출되지 않고, PR 단위로 히스토리가 깔끔하게 정리됩니다.
Settings → General → Pull Requests 하단의 Automatically delete head branches도 함께 켜두세요. PR이 merge되면 해당 브랜치가 자동으로 삭제됩니다. merge된 코드와 히스토리는 main에 이미 합쳐져 있으므로 브랜치를 남겨둘 필요가 없습니다.