01-04 원격 저장소와 협업
원격 저장소와 동기화하는 법 — clone, fetch, pull, push와 추적 브랜치(upstream).
원격 저장소와 동기화하는 법 — clone, fetch, pull, push와 추적 브랜치(upstream).
목표: 팀과 안전하게 코드를 주고받기
🌐 원격 저장소 개념
graph LR
LOCAL["💻 Local Repo"] -->|"push"| REMOTE["🌐 Remote (origin)"]
REMOTE -->|"fetch"| LOCAL
REMOTE -->|"clone"| NEW["💻 새 Local"]
- origin: 기본 원격 저장소의 관례적 이름
- 추적 브랜치(tracking branch): 로컬 브랜치가 짝지은 원격 브랜치(
origin/main)
🔧 git remote — 원격 관리
git remote -v # 등록된 원격 목록(URL)
git remote add origin <url> # 원격 추가
git remote add upstream <원본url> # 포크 워크플로우: 원본 추가
git remote set-url origin <new> # URL 변경
git remote remove origin # 제거
git remote show origin # 상세 정보(브랜치 추적 관계 등)
📥 git clone — 복제
git clone <url> # 복제(자동으로 origin 설정)
git clone <url> my-folder # 폴더명 지정
git clone --depth 1 <url> # 최근 1커밋만(얕은 복제, CI에 유용)
git clone --branch develop <url> # 특정 브랜치만
🔃 git fetch vs git pull
graph LR
REMOTE["🌐 origin/main"] -->|"git fetch"| TRACK["로컬의 origin/main 갱신"]
TRACK -->|"git merge"| LOCAL["내 main"]
REMOTE -->|"git pull = fetch + merge"| LOCAL
git fetch origin # 원격 변경을 받기만(내 작업물 안전) ⭐
git fetch --prune # 원격에서 삭제된 브랜치 정리
git pull # fetch + merge
git pull --rebase # fetch + rebase (선형 히스토리)
[!tip] fetch 먼저가 안전
pull은 받자마자 병합한다.fetch후git log origin/main으로 확인하고 병합하면 예상치 못한 변경을 미리 점검할 수 있다.
📤 git push — 푸시
git push origin main # 푸시
git push -u origin feature # upstream 설정(이후 git push만으로) ⭐
git push # upstream 설정됐다면
git push --tags # 태그 전체 푸시
git push origin --delete feature # 원격 브랜치 삭제
git push --force-with-lease # 안전한 강제 푸시 ⭐
git push --force # 강제 푸시(위험 🔴)
[!warning]
--force대신--force-with-lease그냥--force는 내가 본 이후 남이 올린 커밋도 덮어쓴다.--force-with-lease는 원격이 내 예상과 다르면 거부해 사고를 막는다.
🔗 추적 브랜치(upstream) 설정
git push -u origin feature # push하며 추적 설정
git branch -u origin/feature # 기존 브랜치에 추적 설정
git branch -vv # 추적 관계 확인
추적이 설정되면 git status가 “ahead 2, behind 1” 식으로 원격과의 차이를 알려준다.
🤝 협업 시나리오
표준 PR 흐름
git switch main && git pull # 1. 최신화
git switch -c feature/login # 2. 브랜치
git add -p && git commit -m "feat: 로그인" # 3. 작업
git push -u origin feature/login # 4. 푸시
# 5. 웹에서 PR 생성 → 리뷰 → 머지
git switch main && git pull # 6. 정리
git branch -d feature/login
push 거부됐을 때 (non-fast-forward)
원격에 내가 모르는 커밋이 있을 때 발생:
git pull --rebase # 원격 위로 내 커밋 재배치
git push # 다시 푸시
포크(Fork) 워크플로우
git clone <내포크url>
git remote add upstream <원본url>
git fetch upstream
git rebase upstream/main # 원본 최신과 동기화
📋 체크리스트
-
git remote로 원격 추가·확인 - clone 옵션(depth, branch)
- fetch vs pull 차이
-
--force-with-lease로 안전한 강제 push - upstream 설정과 ahead/behind 해석
- push 거부(non-ff) 대응
- 포크 워크플로우(upstream)
🔗 관련 노트
- 01-03-브랜치와-병합 — 이전: 브랜치
- 01-05-되돌리기와-복구 — 다음: 되돌리기
- 02-02-PR과-코드-리뷰 — PR 심화
- 01-02-버전관리-Git — DevOps 협업 관점
마지막 업데이트: 2026-06-02