홈 › GitHub › 03 / 5

코드 리뷰와 병합 방식

섹션 7진행 0 / 5

4. 응용 변형 예제

4.1 PR 이 뒤처졌을 때 rebase 로 최신화

feat/pricing 브랜치가 push 된 뒤 main 이 같은 파일을 먼저 바꿔 병합됐습니다. GIT_COMMITTER_DATE="$d" git rebase main 으로 최신 main 뒤에 옮겨 붙입니다.

text
== 7. PR 이 뒤처졌을 때: main 이 앞서가고 rebase 로 최신화 ==
Could not apply b210046... # feat: 가격 할인 골격 추가
-- 충돌 표시 확인 --
3:<<<<<<< HEAD
5:=======
7:>>>>>>> b210046 (feat: 가격 할인 골격 추가)

4.2 rebase 충돌 해결 절차

충돌 표시를 지우고 원하는 코드로 정리한 뒤 git add 로 표시하고 git rebase --continue 로 이어갑니다.

text
-- rebase 후: 최신 main 뒤로 붙음 --
* 8ae7579 feat: 가격 할인 골격 추가
* b814aac fix: 기본 할인액 100원 적용
* 5a06a5c chore: CI 설정 추가

4.3 force-with-lease 로 안전하게 다시 올리기

rebase 로 해시가 바뀐 브랜치는 일반 push 가 거부됩니다. 서버 훅 제한은 없지만 --force 대신 --force-with-lease 를 씁니다. 내가 마지막으로 받은 원격 상태와 지금이 같을 때만 덮어써, 동료 커밋을 지우지 않습니다.

text
 ! [rejected]        feat/pricing -> feat/pricing (non-fast-forward)
 + b210046...8ae7579 feat/pricing -> feat/pricing (forced update)

4.4 보호된 브랜치는 되돌리지 말고 새 커밋으로

main 처럼 force push 가 막힌 브랜치에서 실수를 고칠 때는 git reset --hard 로 과거로 되돌리지 않습니다. 대신 고친 내용을 새 커밋으로 쌓아 fast-forward 로 올립니다.

bash
git reset -q --hard "$PUSHED_HEAD"
echo "ci: build, test" > .github-ci.txt
git add .github-ci.txt
commit_at "chore: CI 설정 추가"
git push origin main

4.5 CODEOWNERS 로 인프라 파일까지 자동 지정

배포 스크립트·CI 설정처럼 사고 영향이 큰 경로는 별도 소유자를 지정합니다. 좁은 경로일수록 아래쪽에 적어야 우선합니다.

text
*.java @backend-team
*.yml @devops-team
/.github/workflows/* @devops-team