GitHub Flow는 GitHub에서 추천하는 간단하고 직관적인 브랜치 관리 전략 이다.
feature 브랜치를 통해 독립적으로 작업한 후 main(master) 브랜치에 병합(merge)하는 방식입니다. 주로 지속적인 배포와 변경이 자주 이루어지는 프로젝트에 적합하며 실수로 인해 작업 중 큰 문제가 발생했을 때 복구가 비교적 간단하다는 장점이 있습니다.
GitHub Flow 사용 순서
1. Main 브랜치 준비
- GitHub Flow에서 Main(master) 브랜치는 항상 배포 가능한 상태로 유지해야된다.
- 코드는 main 브랜치에 병합되기 전에 철저히 테스트되고 안정화되어야 합니다.
2. Feature 브랜치 생성하기
- 새로운 기능을 개방하거나 버그를 수정할 때는 반드시 새로운 feature 브랜치를 생성합니다.
- 브랜치 이름은 작업 내용을 쉽게 파악할 수 있도록 feature-기능이름 형식으로 작성하는것이 일반적입니다.
git checkout -b feature-login - 이 브랜치에서 코드를 개발하고 필요한 작업을 진행합니다.
3. Feature 브랜치에서 작업하기
- 필요한 코드를 작성하고 변경사항이 있으면 커밋합니다.
- 변경한 파일을 선택적으로 add하여 커밋합니다.
git add 변경한 파일경로
git commit -m "로그인 기능 구현" - 작업이 완료되면 GitHub 원격 저장소에 푸시합니다.
git push origin feature-login
4. Pull Request (PR) 생성하기
- GitHub 웹 페이지로 이동하여 feature 브랜치에서 Pull Request를 생성합니다.
- 이 단계에서 팀원들이 코드를 리뷰할 수 있으며 문제가 없으면 병합 준비가 완료됩니다.
- PR 생성 시 작성한 내용의 작업에 대한 설명과 변경 사항을 명시하는 것이 좋습니다.
Pull requests -> New pull request -> base(main or master) <- compare(feature-내가 개발한 기능브랜치) ->
수정사항이 생기면 Create pull request 가 생김
Assignees(담당자) - 개발한 사람 즉 본인 클릭
Labels - 이슈 내용 / 팀원들과 상의해서 Edit labels 로 정하는게 좋다.
다 선택하면 밑에 Create pull request 클릭
5. 코드 리뷰 및 병합 (merge)
- 팀원들이 PR을 리뷰하고 피드백을 제공하거나 변경사항을 요청할 수 있습니다.
- 모든 검토와 피드백이 완료되면 Merge Pull Request 버튼을 눌러 main 브랜치에 병합합니다.
- 병합이 끝나면 사용한 feature 브랜치는 삭제할 수 있습니다.
6. Main(master) 브랜치에 병합 후 배포
- main 브랜치에 병합되었으므로 코드가 안정화되고 배포될 준비가 되었다고 판단된다.
- 실제 배포는 이 시점에 이루어질 수 있으며 main 브랜치 상태는 항상 안정적으로 유지해야합니다.
예시 사용 흐름
1. main 브랜치에서 새로운 기능을 개발하기 위해 feature-login 브랜치를 생성합니다.
git checkout -b feature-login
2. 코드를 작성한 후 커밋하고 푸시합니다.
git add .
git commit -m "로그인 기능 추가"
git push origin feature-login
3. GitHub에서 Pull Request를 생성하고 팀원들의 코드 리뷰를 요청합니다.
4. 팀원들이 리뷰를 완료한 후 문제가 없으면 PR을 병합합니다.
5. 필요에 따라 feature-login 브랜치는 삭제합니다.
git branch -d feature-login
GitHub Flow의 장점
- 간단한 구조로 인해 초보자도 쉽게 사용할 수 있습니다.
- 각 기능은 별도의 브랜치에서 독립적으로 개발되므로 안전하게 작업할 수 있습니다.
- CI/CD와 연동이 쉬워 지속적인 배포가 가능합니다.
주의사항
- 작업 전 최신 상태로 유지하기 위해 feature 브랜치를 생성하기 전 main 브랜치에서 git pull을 실행하는 습관이 필요합니다.
- 작업 단위가 작고 명확할수록 충돌을 줄일 수 있으며 코드 리뷰도 수월해집니다.