LeanX

원격 저장소: 올리고 내려받기

origin은 내 프로젝트가 연결된 GitHub 원격 저장소의 별명이며, git push로 내 커밋을 GitHub에 올리고 git pull로 GitHub의 최신 변경을 내려받아 내 컴퓨터와 원격을 동기화합니다.

지난 레슨에서 찍은 커밋은 아직 내 컴퓨터 안에만 있습니다. 이제 이것을 GitHub라는 온라인 창고에 올려 봅시다. 이렇게 인터넷에 있는 저장소를 원격 저장소(remote)라고 부릅니다. 핵심 동작은 딱 두 개입니다. 올리기(push)와 내려받기(pull).

push(올리기)와 pull(내려받기)

git push (올리기)

  • 내가 만든 커밋을 원격으로 올림
  • 내 컴퓨터(로컬) → GitHub(원격) 방향
  • 원격에 저장·백업됨

git pull (내려받기)

  • 남이 올린 커밋을 받아옴
  • GitHub(원격) → 내 컴퓨터(로컬) 방향
  • 내 컴퓨터를 최신 상태로 갱신

push는 내 커밋을 위로 올리고, pull은 원격의 최신 변경을 아래로 내려받습니다.

origin이란? — 원격 저장소의 별명

매번 git push https://github.com/... 처럼 긴 주소를 치면 번거롭겠죠. 그래서 Git은 원격 저장소 주소에 origin(오리진)이라는 별명을 붙여 씁니다. origin은 '내가 연결한 그 GitHub 저장소'를 가리키는 애칭이라고 생각하면 됩니다. 대부분의 프로젝트에서 기본 원격의 이름이 origin입니다.

처음 연결하고 올리기

git clone으로 가져온 프로젝트는 origin이 이미 연결돼 있어 바로 push/pull이 됩니다. 하지만 git init으로 내 컴퓨터에서 새로 시작한 프로젝트는 아직 어느 GitHub 저장소와도 연결돼 있지 않습니다. 이때 연결을 만들어 줘야 합니다. 가장 쉬운 방법은 gh 명령으로 GitHub에 저장소를 만들면서 한 번에 연결하는 것입니다.

방법 A — gh로 저장소 생성 + 연결 + 올리기 (초보자 추천)

# GitHub에 저장소를 만들고, origin 연결과 첫 push까지 한 번에
gh repo create my-first-repo --public --source=. --push

방법 B — 이미 GitHub에 빈 저장소를 만들어 둔 경우

# 1. 원격 저장소를 origin이라는 별명으로 연결
git remote add origin https://github.com/사용자이름/my-first-repo.git

# 2. 처음 올릴 때는 -u 로 '앞으로 이 브랜치는 origin과 짝'이라고 지정
git push -u origin main

# 3. 이후부터는 짧게 git push 만 하면 됨
git push

여기서 -u 옵션(또는 --set-upstream)이 핵심입니다. 처음 한 번만 -u로 '내 main 브랜치는 origin의 main과 연결된 짝'이라고 알려 주면, 그다음부터는 git push, git pull처럼 짧게 써도 Git이 어디로 올리고 내릴지 알아서 압니다.

협업의 황금률: pull 먼저, push 나중

혼자 쓸 때는 그냥 push만 해도 됩니다. 하지만 팀원과 함께 쓰면 얘기가 달라집니다. 내가 작업하는 사이 다른 사람이 이미 GitHub에 새 커밋을 올렸을 수 있으니까요. 이럴 때 무작정 push하면 충돌이 납니다.

협업 시 안전한 순서

  1. 작업을 시작하거나 push하기 전에 git pull 로 원격의 최신 상태를 먼저 받습니다.
  2. 받아온 최신 상태 위에서 내 작업을 하고 커밋합니다.
  3. git push 로 내 커밋을 올립니다.
  4. 즉, 항상 '내려받고(pull) → 작업 → 올리기(push)' 순서를 지킵니다.

지금 내 저장소에 어떤 원격이 연결돼 있는지 궁금하면 git remote -v 를 입력하세요. origin의 실제 주소가 표시됩니다. 연결이 잘못됐다면 git remote remove origin 으로 지우고 다시 add 하면 됩니다.

push했는데 '거부(rejected)' 메시지가 나오면 대부분 원격에 내가 아직 안 받은 새 커밋이 있다는 뜻입니다. 당황하지 말고 먼저 git pull 로 최신 변경을 받은 뒤 다시 push하세요. 거부 메시지는 에러가 아니라 '충돌을 막으려는 안전장치'입니다.

이제 내 코드가 GitHub에 안전하게 백업됐습니다. 하지만 지금까지는 main이라는 한 갈래에서만 작업했습니다. 다음 레슨에서는 여러 작업을 안전하게 나눠서 하는 브랜치를 배웁니다.