Git
Git upstream 브랜치를 잘못 설정했을 때 벌어지는 일
로컬 브랜치의 upstream이 잘못되면 pull/push가 엉뚱한 곳으로 가거나 머지 충돌이 늘어난다.
Git을 쓰다가 자신도 모르게 upstream을 잘못 설정하면, 나중에 배포 시점에 큰 혼란을 겪을 수 있다. 로컬에서는 멀쩡한 코드도, upstream 설정이 틀리면 배포 환경에 엉뚱한 내용이 들어갈 수 있다.
Upstream이란
Git에서 upstream은 로컬 브랜치가 추적하는 원격 브랜치다. 로컬의 main 브랜치가 원격의 origin/main을 추적한다고 하면, push나 pull할 때 기본으로 그 원격 브랜치를 사용한다.
# 현재 브랜치의 upstream 확인
git branch -vv
# 상세 정보
git config branch.main.remote
git config branch.main.merge
잘못된 Upstream의 증상
1. Pull이 엉뚱한 브랜치에서 온다
$ git pull
# 예상: origin/main에서 최신 커밋을 받아옴
# 실제: origin/develop에서 커밋을 받아옴
2. Push가 엉뚱한 곳으로 간다
$ git push
# 예상: origin/main에 푸시
# 실제: origin/develop에 푸시됨 (머지 충돌 야기)
3. Pull request가 이상한 브랜치로 생성된다
GitHub의 PR 생성 화면에서 base branch가 예상과 다를 수 있다. PR을 잘못된 브랜치에 열면, 리뷰와 머지 과정에서 큰 혼란이 생긴다.
실제 문제 상황
한 번 본 예시: 개발자가 feature-1 브랜치를 만들고 개발했는데, checkout할 때 실수로 upstream을 origin/develop으로 설정했다. 나중에 배포할 때 git push를 쓰니 origin/develop에 가버렸고, 운영 배포는 origin/main에서만 하기로 했으니 배포가 안 됐다.
더 심한 경우, 여러 개발자가 같은 잘못된 upstream을 쓰면 충돌이 폭증한다.
Upstream 올바르게 설정하기
새 브랜치를 만들 때
# 방법 1: 생성과 동시에 upstream 설정
git checkout -b feature-new origin/main --track
# 방법 2: 생성 후 나중에 설정
git checkout -b feature-new
git branch -u origin/main
# 방법 3: GitHub의 UI에서 브랜치 만들면 자동 설정됨
이미 있는 브랜치의 upstream 변경
# 현재 upstream 확인
git branch -vv
# Upstream 변경
git branch -u origin/main
# 또는
git branch --set-upstream-to=origin/main
전체 브랜치 upstream 한눈에 보기
# 더 자세하게
git for-each-ref --format='%(refname:short) -> %(upstream:short)' refs/heads/
# 또는 간단하게
git branch -vv
배포 전 체크리스트
배포하기 전에 upstream을 반드시 확인하자.
# 1. 현재 브랜치와 upstream 확인
git branch -vv
# 2. 로컬과 원격의 차이 확인
git log origin/main..HEAD # 로컬에만 있는 커밋
git log HEAD..origin/main # 원격에만 있는 커밋
# 3. Merge base 확인
git merge-base --is-ancestor origin/main HEAD
echo $? # 0이면 origin/main이 HEAD의 조상
CI/CD에서의 Upstream
CI/CD 파이프라인에서는 upstream이 정의되지 않으므로, 명시적으로 어느 브랜치를 쓸지 지정해야 한다.
# GitHub Actions 예시
- name: Deploy
run: |
git fetch origin main
git merge origin/main
npm run build && npm run deploy
Loca 머신의 설정에 의존하지 말고, 스크립트에서 명시하는 게 안전하다.
Upstream 실수로 인한 배포 실패 복구
혹시 upstream 때문에 잘못된 코드가 배포됐다면:
# 1. 현재 배포된 상태 확인
git log origin/main -1
# 2. 이전 안정 버전으로 돌아가기
git revert <wrong-commit>
# 또는
git reset --hard origin/main~1
# 3. 다시 올바른 브랜치에 push
git push -f origin main:main # 주의: force push는 신중하게!
정리
Upstream은 Git 작업의 흐름을 결정하는 중요한 설정이다. 특히 여러 개발자와 협업할 때는 더욱 신경 써야 한다. 배포 전에 항상 git branch -vv로 확인하고, CI/CD에서는 명시적으로 지정하자. 작은 실수가 배포 사건으로 번질 수 있으므로, 습관처럼 확인하는 게 최고의 방어다.