공공부하자개발 · 영어 학습 노트
협업·배포
Git버전 관리와 협업0/8 완료
  • 01저장소와 커밋
  • 02브랜치와 병합
  • 03되돌리기
  • 04원격 저장소
  • 05히스토리 정리
  • 06태그와 버전
  • 07협업 규칙
  • 08문제 해결
사이트 소개개인정보처리방침연락처
© 2026 공부하자
홈 › Git › 04 / 8

원격 저장소

섹션 7진행 0 / 8
1왜 배우는가2핵심 원리3코드 예제4응용 변형 예제5자주 하는 실수 (Tip)6연습 문제7정리‹ 이전다음 ›

2. 핵심 원리

2.1 원격은 다른 저장소의 별명

원격(remote)은 URL 이나 경로에 붙인 이름표입니다. 기본 이름은 origin 이고, clone 을 하면 git 이 자동으로 등록합니다. 원격 자체는 저장소가 아니라 "어디에 있는 저장소를 가리키는가" 하는 설정값입니다.

2.2 git remote 로 보고 관리하기

명령 동작
git remote -v 등록된 원격 이름과 주소 목록
git remote add <이름> <경로> 원격 추가
git remote rename <old> <new> 이름 변경
git remote remove <이름> 등록 해제
git remote set-url <이름> <경로> 주소만 교체

remove 는 원격 저장소 자체를 지우지 않습니다. 내 저장소에 등록된 연결 정보만 지웁니다.

2.3 원격 추적 브랜치와 로컬 브랜치

clone 이나 fetch 를 하면 원격의 브랜치가 origin/main 같은 원격 추적 브랜치(remote-tracking branch)로 내 저장소 안에 복사됩니다. 로컬 브랜치 main 과는 별개의 포인터입니다.

text
로컬 저장소
  main (로컬 브랜치, 작업하는 대상)
    └─ origin/main (원격 추적 브랜치, 마지막으로 통신한 결과의 스냅샷)
          └─ origin 저장소의 main (진짜 원격, fetch 해야 갱신됨)

origin/main 은 내가 직접 커밋하는 브랜치가 아닙니다. fetch 나 push 가 성공할 때만 git 이 자동으로 움직입니다.

2.4 fetch 와 pull 의 차이

git fetch 는 원격의 새 커밋을 받아 원격 추적 브랜치만 갱신합니다. 내 작업 트리와 로컬 브랜치는 그대로입니다. git pull 은 fetch 뒤에 병합(merge)까지 자동으로 실행하는 명령입니다.

명령 fetch 병합 작업 트리 변화
git fetch O X 없음
git pull O O (merge) 있음
git pull --rebase O O (rebase) 있음

git config pull.ff only 를 설정하면 pull 이 빨리 감기(fast-forward)만 허용합니다. 이력이 갈라졌으면 병합 대신 바로 실패해서, 뜻하지 않은 병합 커밋을 막아 줍니다.

2.5 추적 브랜치 설정

로컬 브랜치가 어떤 원격 브랜치를 기본으로 주고받을지가 추적(tracking) 관계입니다.

방법 상황
git push -u origin main 처음 push 하며 추적도 같이 설정
git branch --set-upstream-to=origin/main dev 이미 있는 브랜치에 나중에 설정
git branch -vv 브랜치별 추적 대상과 ahead·behind 확인

추적이 설정되면 git push, git pull 을 인자 없이 써도 됩니다.

2.6 git push 와 거부되는 경우

push 는 로컬 브랜치의 커밋을 원격에 반영합니다. 원격에 내가 받지 않은 새 커밋이 있으면 non-fast-forward 로 거부됩니다. 다른 사람(또는 다른 작업 폴더)이 먼저 push 했다는 뜻입니다.

대처는 fetch 로 원격 변화를 받고 merge 나 rebase 로 내 커밋과 합친 뒤 다시 push 하는 것입니다. 절대 --force 로 밀어붙이지 않습니다.

2.7 force-with-lease 와 force 차이

--force 는 원격의 현재 상태를 무시하고 무조건 덮어씁니다. 그사이 동료가 올린 커밋이 있어도 통째로 사라집니다.

--force-with-lease 는 내가 마지막으로 안 원격 상태(원격 추적 브랜치)와 실제 원격이 같을 때만 덮어씁니다. 다르면 거부되어, 모르는 새 커밋을 지우는 사고를 막습니다.

2.8 push --delete 로 브랜치·태그 삭제, fetch --prune

git push origin --delete <브랜치> 로 원격 브랜치를, git push origin --delete <태그> 로 원격 태그를 지웁니다. 다른 사람 저장소에는 삭제된 원격 브랜치가 원격 추적 브랜치로 남아 있을 수 있습니다.

git fetch --prune 은 원격에서 없어진 브랜치의 원격 추적 브랜치를 로컬에서도 정리합니다.

2.9 git clone 변형

옵션 효과
--branch <이름> 특정 브랜치만 기본으로 받기
--depth 1 최근 커밋만 받는 얕은 클론
--bare 작업 트리 없는 bare 저장소로 클론

로컬 경로를 원격으로 쓰면 git 이 하드링크로 최적화해서 --depth 를 무시합니다. 강제로 얕게 받으려면 --no-local 을 같이 씁니다.

2.10 bare 저장소와 사내 서버

bare 저장소는 작업 트리 없이 .git 내부 내용만 있는 저장소입니다. 사람이 파일을 편집하는 곳이 아니라 여러 사람이 push·fetch 를 주고받는 중계 지점입니다. git init --bare 로 만들고, 사내 서버에 두면 GitHub 없이도 팀 저장소 역할을 합니다.

2.11 인증 방식과 주소 형식

주소 형식 예 인증
ssh git@서버:경로/repo.git ssh 키
https https://서버/경로/repo.git 토큰, credential helper

ssh 는 공개키를 서버에 등록해 두면 비밀번호 없이 접속합니다. https 는 매번 자격 증명이 필요한데, credential helper 가 이를 안전하게 저장해 재입력을 줄입니다. 폐쇄망에서는 사내 git 서버가 둘 중 하나를 사용합니다.

2.12 폐쇄망 반입: bundle 과 archive, 여러 원격

git bundle 은 저장소의 커밋·브랜치를 파일 하나에 담습니다. git archive 는 특정 시점의 소스 파일만 tar·zip 으로 뽑아, 이력 없이 배포할 때 씁니다.

포크 협업에서는 원격을 두 개 씁니다. origin 은 내가 push 하는 내 저장소, upstream 은 원본 저장소입니다. fetch upstream 으로 원본 변경을 받고, push origin 으로 내 저장소에만 올립니다.

핵심 원리
  • 2.1 원격은 다른 저장소의 별명
  • 2.2 git remote 로 보고 관리하기
  • 2.3 원격 추적 브랜치와 로컬 브랜치
  • 2.4 fetch 와 pull 의 차이
  • 2.5 추적 브랜치 설정
  • 2.6 git push 와 거부되는 경우
  • 2.7 force-with-lease 와 force 차이
  • 2.8 push --delete 로 브랜치·태그 삭제, fetch --prune
  • 2.9 git clone 변형
  • 2.10 bare 저장소와 사내 서버
  • 2.11 인증 방식과 주소 형식
  • 2.12 폐쇄망 반입: bundle 과 archive, 여러 원격
이전 섹션1 왜 배우는가2 / 7다음 섹션3 코드 예제