실제 협업 프로젝트에서 기능(Feature) 브랜치를 운영할 때, 교과서적인 순서대로만 일이 진행되지는 않습니다. 내가 먼저 브랜치를 땄더라도 동료의 작업이 먼저 develop에 머지되는 일은 매일 발생합니다. 이 문서에서는 프롬프트 상의 브랜치 상태(branch-name) $를 명시하여 완벽한 실무 개발 사이클을 다룹니다.
1. 표준 작업 사이클 (Happy Path)
Step 1. develop 최신화 후 feature 분기
# develop 브랜치로 이동 후 원격 최신 변경사항 반영
(main) $ git switch develop
Switched to branch 'develop'
(develop) $ git pull --ff-only origin develop
# 새로운 작업 브랜치 생성 및 이동 (규칙: feature/기능명)
(develop) $ git switch -c feature/order-coupon
Switched to a new branch 'feature/order-coupon'Step 2. 로컬 개발 및 원자적 커밋(Atomic Commit)
(feature/order-coupon) $ git status
(feature/order-coupon) $ git diff
# 수정된 파일 스테이징 및 커밋
(feature/order-coupon) $ git add app/Services/CouponService.php
(feature/order-coupon) $ git commit -m "feat: 쿠폰 할인 금액 계산 로직 구현"2. 실무 현실 시나리오: 동료의 PR이 먼저 머지되었을 때
내가 feature/order-coupon을 개발하는 동안, 다른 동료가 feature/order-payment 작업을 끝내고 develop에 먼저 PR을 올려 머지시켰습니다.
develop: --- C1 --- C2 (동료의 결제 기능 머지 완료)
\
feature/order-coupon: --- C3 --- C4 (내 쿠폰 작업 커밋들)해결법: 내 브랜치에 최신 develop 베이스 당겨오기 (Rebase)
# 1. 원격 최신 develop 정보 가져오기
(feature/order-coupon) $ git fetch origin develop
# 2. 내 브랜치에 최신 develop을 베이스로 재배치
(feature/order-coupon) $ git rebase origin/develop
Successfully rebased and updated refs/heads/feature/order-coupon.이렇게 Rebase를 실행하면 내 커밋(C3, C4)이 동료의 커밋(C2) 뒤로 깔끔하게 재배치됩니다:
develop: --- C1 --- C2
\
feature/order-coupon: --- C3' --- C4' (충돌 없이 1자 정렬)3. 원격 Push 및 Pull Request (PR) 작성
# 첫 푸시 시 upstream(-u) 지정
(feature/order-coupon) $ git push -u origin feature/order-coupon
# 이미 푸시한 상태에서 Rebase를 수행했다면 안전한 강제 푸시
(feature/order-coupon) $ git push --force-with-lease origin feature/order-coupon4. 코드 리뷰 피드백 반영하기
리뷰어가 "할인율 100% 초과 방지 예외 처리를 추가해주세요"라고 요청했습니다.
# 코드 수정 후
(feature/order-coupon) $ git add app/Services/CouponService.php
(feature/order-coupon) $ git commit -m "fix: 쿠폰 최대 할인율 초과 예외 처리 추가"
# 원격 푸시 (PR에 자동으로 새 커밋이 추가됨)
(feature/order-coupon) $ git push origin feature/order-coupon5. 머지 완료 후 깔끔한 로컬 정리
PR이 승인(Approved)되어 develop에 머지되었다면, 내 로컬 환경에서도 다 쓴 브랜치를 깨끗하게 청소합니다.
# 1. develop 브랜치로 이동
(feature/order-coupon) $ git switch develop
Switched to branch 'develop'
# 2. 내 작업이 머지된 최신 develop 가져오기
(develop) $ git pull --ff-only origin develop
# 3. 로컬의 feature 브랜치 안전 삭제 (-d는 머지 확인 후 삭제)
(develop) $ git branch -d feature/order-coupon
Deleted branch feature/order-coupon (was 8e2d4a1).
# 4. 원격에서 삭제된 브랜치 흔적 로컬 캐시에서 청소
(develop) $ git fetch --prune