C.W.K.
Stream
Lesson 01 of 05 · published

origin, upstream, remote-tracking branch

~20 min · remote, fetch

Level 0Untracked 새싹
0 XP0/47 lessons0/14 achievements
0/100 XP to next level100 XP to go0% complete

origin, upstream, 그리고 remote-tracking 그림자

Git 의 remote 는 다른 repo 사본에 대한 이름 붙은 책갈피야 — 보통 GitHub, GitLab, 자체 gitolite 같은 서버 URL. 관습적으로 clone 한 곳이 origin; 기술적으로 특별한 거 없지만 모든 도구 / 튜토리얼이 이걸 가정해. 남의 프로젝트에서 fork 한 repo 는 보통 원본 가리키는 두 번째 remote upstream 추가해.

remote 를 유용하게 만드는 게 remote-tracking branch. fetch 하면 Git 이 remote 의 각 branch 시각을 refs/remotes/origin/<branch> 아래 저장해. branch 처럼 보이고 read-only pointer 처럼 동작 — origin/main 은 네 머신이 서버의 main 에 마지막으로 본 모습. 네 local main 은 앞설 수도 뒤질 수도 같은 자리에 있을 수도 있어. fetch 의 핵심 목적이 이 그림자를 정확하게 유지해서 추측 없이 local 작업과 비교 가능하게 하는 거야.

"Tracking" 은 별개의 선택적 설정이야: local branch 가 remote-tracking branch 를 tracking 하도록 세팅 가능, 그러면 git pullgit push 가 인자 없이 default-correct. remote 만 있는 branch 에 git switch feature/login 하면 local branch 가 자동으로 origin/feature/login 을 tracking 해 (Git 2.23+). 새 branch 는 git push -u origin feature/x 로 첫 push 때 tracking 설정.

멘탈 모델: 어딘가 진짜 서버가 있고, origin/main 은 마지막 fetch 시점의 스냅샷, main 은 local 작업, upstream/main (있으면) 은 원본 프로젝트. fetch 는 작업 안 건드리고 스냅샷만 업데이트, merge/rebase 는 작업을 스냅샷에 통합 (또는 반대), push 는 작업을 서버에 업로드. 혼란은 거의 다 '스냅샷 존재' 를 잊은 데서 와.

Code

remote 검사 + 설정·bash
# 이 repo 가 아는 remote 들?
git remote -v

# 두 번째 remote 추가 (fork 의 전형):
git remote add upstream https://github.com/original/repo.git

# rename / remove / URL 변경:
git remote rename origin github
git remote remove old-remote
git remote set-url origin git@github.com:user/repo.git

# remote-tracking 포함 모든 ref:
git branch -a
git for-each-ref refs/remotes/
local 을 remote-tracking 그림자와 비교·bash
# working tree 안 건드리고 remote-tracking ref 업데이트:
git fetch origin

# origin 이 가지고 있고 내가 없는 것?
git log main..origin/main --oneline

# 내가 가지고 있고 origin 이 없는 것?
git log origin/main..main --oneline

# 대칭: 양쪽 발산
git log --left-right --oneline main...origin/main

External links

Exercise

아무 clone 한 repo 에서 git remote -v, git branch -a, git for-each-ref refs/remotes/ 실행. git fetch origingit log main..origin/main, git log origin/main..main. 각 출력을 보기 전에 예측, 검증. 각 명령이 local-vs-remote 발산에 대해 뭘 보여줬는지 적어.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.