Git 기초편 5편 — 원격 저장소 연결하기

2026. 5. 11. 01:01·블로그, 컴퓨터/DevOps

Git 연재글 썸네일

"Git을 공부하면서 쓰는 시리즈" 5편입니다.
1편: git init · 2편: 브랜치 · 3편: git log 트리 · 4편: merge와 충돌


시작하면서

지금까지는 전부 내 컴퓨터 안에서만 했습니다. 커밋도, 브랜치도, merge도 — 전부 로컬에서 일어난 일이에요.

그런데 협업을 하거나, 다른 컴퓨터에서 이어서 작업하거나, 그냥 백업만 해두려고 해도 어딘가에 올려야 합니다. 그게 원격 저장소(remote repository) 입니다. GitHub, GitLab, Bitbucket 같은 서비스가 원격 저장소를 호스팅해줍니다.

이번 편에서는 GitHub를 기준으로 설명합니다.


원격 저장소 연결하기 — git remote

GitHub에서 새 저장소를 만들면 이런 안내가 나옵니다.

git remote add origin https://github.com/username/my-project.git

git remote add는 "이 원격 저장소를 origin이라는 이름으로 등록한다"는 뜻입니다.

origin은 이름입니다. main처럼 Git이 관례적으로 쓰는 기본 이름인데, 마음대로 바꿀 수 있습니다. 다만 거의 모든 프로젝트가 origin을 쓰기 때문에 바꿀 이유가 없습니다.

잘 연결됐는지 확인합니다.

git remote -v
origin  https://github.com/username/my-project.git (fetch)
origin  https://github.com/username/my-project.git (push)

fetch와 push 두 줄이 나옵니다. 가져오는 주소와 올리는 주소가 따로 있다는 뜻인데, 보통은 같은 주소입니다.


git push — 로컬 커밋을 원격으로 올리기

git push origin main

"origin(원격 저장소)의 main 브랜치에 현재 로컬의 내용을 올려라"는 뜻입니다.

처음 push할 때는 -u 옵션을 씁니다.

git push -u origin main

-u는 --set-upstream의 줄임말입니다. "앞으로 이 브랜치는 origin/main과 연결된다"는 걸 등록하는 옵션입니다. 한 번만 해두면 다음부터는 git push만 쳐도 됩니다.

# -u 등록 후
git push   # origin main 생략 가능

origin/main은 뭔가요?

git log --oneline --graph --all을 치면 이런 게 보이기 시작합니다.

git log --oneline --graph --all
* c1d2e3f (HEAD -> main, origin/main) 로그인 페이지 초안 추가

origin/main은 원격 저장소의 main 브랜치가 어디 있는지 로컬에서 기억해두는 포인터입니다. "원격 추적 브랜치"라고 부릅니다.

로컬에서 새 커밋을 만들면 main은 앞으로 나아가지만 origin/main은 아직 그 자리에 있습니다.

* f9a8b7c (HEAD -> main) 새 기능 추가          ← 아직 push 안 됨
* c1d2e3f (origin/main) 로그인 페이지 초안 추가  ← 원격과 싱크된 지점

git push를 하면 origin/main이 main과 같은 위치로 따라옵니다.


git fetch — 원격 변경사항 가져오기 (조심스럽게)

다른 사람이 원격에 새 커밋을 올렸습니다. 내 로컬에는 아직 없어요. 가져오는 방법이 두 가지입니다. fetch와 pull인데, 동작 방식이 다릅니다.

fetch는 원격의 변경사항을 로컬에 내려받되, 내 작업에는 적용하지 않습니다.

git fetch origin

git log --oneline --graph --all로 확인하면 이렇게 됩니다.

git log --oneline --graph --all
* d4e5f6a (origin/main) 다른 사람이 올린 커밋
* c1d2e3f (HEAD -> main) 로그인 페이지 초안 추가

origin/main은 앞으로 나갔지만 내 main은 아직 그 자리입니다. 원격에 뭐가 올라왔는지 확인만 한 상태예요. 내 작업 디렉토리는 건드리지 않았습니다.

이 상태에서 내 main에 반영하려면 merge를 따로 해야 합니다.

git merge origin/main

git pull — fetch + merge를 한 번에

pull은 fetch와 merge를 연달아 실행하는 단축 명령어입니다.

git pull origin main

원격의 최신 커밋을 가져오면서 내 현재 브랜치에 바로 합칩니다.

fetch:  원격 변경사항을 origin/main에 내려받기
merge:  origin/main을 현재 브랜치(main)에 합치기

편리하지만 주의할 점이 있습니다. 내가 로컬에서 작업 중인 게 있을 때 pull을 하면 merge가 일어나면서 충돌이 날 수 있습니다. 그래서 실무에서는 pull 전에 git status로 현재 상태를 확인하는 습관이 중요합니다.

git status        # 변경사항 없는지 확인
git pull origin main

fetch와 pull, 언제 뭘 쓰나요?

둘 다 원격 변경사항을 가져오는데, 선택 기준은 이렇습니다.

pull — 로컬에 작업 중인 게 없고, 그냥 최신 상태로 맞추고 싶을 때. 빠르고 간편합니다.

fetch — 원격에 뭐가 올라왔는지 먼저 확인하고 싶을 때. 내 작업을 건드리지 않으니까 안전합니다. 확인 후 merge 여부를 직접 결정할 수 있습니다.

처음엔 pull만 써도 됩니다. 나중에 "pull 했다가 충돌이 났다"는 경험을 한 번 하고 나면 fetch가 편해집니다.


upstream 브랜치란

앞서 -u 옵션으로 업스트림을 등록했습니다. 업스트림은 이 로컬 브랜치가 추적하는 원격 브랜치입니다.

# 현재 브랜치의 upstream 확인
git branch -vv
* main  c1d2e3f [origin/main] 로그인 페이지 초안 추가

[origin/main]이 이 브랜치의 upstream입니다. 등록이 되어 있으면 git push, git pull에서 매번 origin main을 생략할 수 있습니다.

새 브랜치를 처음 push할 때도 마찬가지입니다.

git switch -c feature/signup
# 작업 후...
git push -u origin feature/signup

이 명령어 한 번으로 원격에 feature/signup 브랜치를 만들고, upstream도 등록합니다.


전체 흐름 한눈에 보기

로컬 저장소                        원격 저장소 (GitHub)
──────────────────────────────────────────────────────
작업 디렉토리
    │
    │ git add / git commit
    ▼
로컬 브랜치 (main)
    │                                    │
    │ git push ─────────────────────────▶│  origin/main
    │                                    │
    │ git fetch ◀────────────────────────│  (origin/main 업데이트, 내 main은 그대로)
    │                                    │
    │ git pull  ◀────────────────────────│  (fetch + merge, 내 main도 업데이트)
    │                                    │

이번 편 정리

명령어 하는 일
git remote add origin <url> 원격 저장소를 origin이라는 이름으로 등록
git remote -v 등록된 원격 저장소 확인
git push -u origin main 원격에 올리고 upstream 등록 (처음 한 번)
git push upstream 등록 후 간단하게 올리기
git fetch origin 원격 변경사항을 가져오되 내 브랜치엔 적용 안 함
git pull origin main 원격 변경사항을 가져와서 바로 merge
git branch -vv 각 브랜치의 upstream 확인

핵심 개념

  • origin은 원격 저장소의 별명이다.
  • origin/main은 원격 main의 상태를 로컬에서 기억하는 포인터다.
  • pull = fetch + merge이다.

다음 편 예고

원격 저장소에 올릴 때 올리면 안 되는 파일이 꼭 생깁니다. API 키, 비밀번호가 담긴 .env 파일, 수백 MB짜리 빌드 결과물 같은 것들이요. 다음 편에서는 .gitignore로 이런 파일을 Git 추적에서 제외하는 방법을 다룹니다. 이미 올라간 파일을 뒤늦게 제외하는 방법도 함께 봅니다.


이 시리즈의 다른 글

  • [기초편 1편] git init과 첫 커밋까지
  • [기초편 2편] 브랜치, 어렵지 않아요
  • [기편 3편] git log를 트리로 보는 법
  • [기초편 4편] merge와 충돌 해결
  • [기초편 6편] .gitignore 제대로 쓰기
반응형
저작자표시 비영리 변경금지 (새창열림)

'블로그, 컴퓨터 > DevOps' 카테고리의 다른 글

Git 기초편 7편 — stash, 작업 잠깐 숨기기  (0) 2026.05.11
Git 기초편 6편 — .gitignore 제대로 쓰기  (0) 2026.05.11
Git 기초편 4편 — merge와 충돌 해결  (0) 2026.05.10
Git 기초편 3편 — git log를 트리로 보는 법  (1) 2026.05.10
Git 기초편 2편 — 브랜치, 어렵지 않아요  (0) 2026.05.09
'블로그, 컴퓨터/DevOps' 카테고리의 다른 글
  • Git 기초편 7편 — stash, 작업 잠깐 숨기기
  • Git 기초편 6편 — .gitignore 제대로 쓰기
  • Git 기초편 4편 — merge와 충돌 해결
  • Git 기초편 3편 — git log를 트리로 보는 법
생각사람
생각사람
지극히 사적인 연구실
  • 생각사람
    생각사람의 별장
    생각사람
  • 전체
    오늘
    어제
    • 분류 전체보기 (207) N
      • 금융 (57)
        • 주식 공부 (11)
        • 파생상품 입문 (17)
        • 파생상품 기초 (15)
        • 파생상품 실전 (14)
      • 블로그, 컴퓨터 (83) N
        • 프로그래밍 (16)
        • DevOps (8)
        • AI, RL, ML, ... (5)
        • 애드센스, SEO (23)
        • 임베디드 (3)
        • 컴퓨터 관련 (7)
        • Cheatsheets (21) N
      • 다른 공부들 (67)
        • 읽고 쓰기 (18)
        • 수학 (15)
        • 물리 (9)
        • 사진 공부 (25)
  • 인기 글

  • 최근 글

  • 최근 댓글

  • 태그

    행렬
    슈뢰딩거 방정식
    CheatSheet
    코딩
    스트랭글
    github
    선형대수학
    옵션 투자
    Kreyszig
    오펜하이머
    스트래들
    version control
    공업수학
    독후감
    GIT
    구글 애드센스
    c
    AI
    옵션
    c++
    프로그래밍
    선물 옵션
    깃허브
    cmake
    양자역학
    소니 a6000
    깃
    웹크롤러
    벡터
    파생상품
  • hELLO· Designed By정상우.v4.10.6
생각사람
Git 기초편 5편 — 원격 저장소 연결하기
상단으로

티스토리툴바