[코드잇] git push -u origin master의 비밀

코드잇 / 20. 07. 07. 오후 2:02

여러분 git push에 대해서 얼마나 자세히 알고 계신가요?

git push에 관해 알아두면 좋은 사실 하나를 배워봅시다.

GitHub 페이지에서 리모트 레포지토리를 처음 생성하고 나면 누구나 아래와 같은 그림을 봤을 겁니다.

그리고 이때, 현재 내 컴퓨터에서 작업 중이던 로컬 레포지토리가 있는지 없는지에 따라 해야하는 작업들이 조금 달라지는데요.

(1) 아직 내 컴퓨터에 로컬 레포지토리가 없는 경우에는 로컬 레포지토리를 생성하고, 커밋을 하면 됩니다.

(2) 내 컴퓨터에 이미 로컬 레포지토리가 있고 커밋도 좀 한 경우에는 따로 할 게 없습니다.

이 과정 이후에는

git remote add origin [프로젝트의 GitHub 상 주소]

를 실행해서 리모트 레포지토리를 origin이라는 이름으로 등록합니다.

그 다음에는 로컬 레포지토리의 내용을 리모트 레포지토리에 전송해야 합니다. 이때

git push -u origin master

이 커맨드를 쓰는데요.

이 커맨드는 origin이라는 리모트 레포지토리에 master라는 브랜치를 생성하고

로컬 레포지토리의 master 브랜치의 내용을 리모트 레포지토리의 master 브랜치에 보내라는 뜻입니다.

그럼 -u 옵션은 왜 필요할까요?

바로 이 부분이 많은 분들이 별로 신경쓰지 않고 넘어가는 부분입니다. -u 옵션은 —set-upstream의 줄임말인데요. 이 옵션을 쓰면 로컬 레포지토리의 master 브랜치가 리모트 레포지토리의 master 브랜치를 항상 추적하도록(tracking) 하도록 설정됩니다.

이런 관계를 tracking connection이라고 합니다.(이렇게 tracking connection이 있을 때 리모트 레포지토리의 master 브랜치를 '로컬 레포지토리의 master 브랜치'의 업스트림(upstream) 브랜치라고 합니다.)

이렇게 tracking connection이 설정되면 앞으로 로컬 레포지토리의 master 브랜치에서 단지

git push

라고만 쓰고 실행해도 자동으로 리모트 레포지토리의 master 브랜치에 내용을 전송하고,

git pull

이라고만 쓰고 실행해도 자동으로 리모트 레포지토리의 master 브랜치의 내용을 가져옵니다.

그럼 만약 -u 옵션을 주지 않고 이렇게만 실행했으면 어땠을까요?

git push origin master

이렇게 해도 origin이라는 리모트 레포지토리에 master 브랜치가 생성되는 것은 마찬가지입니다. 하지만 그 이후로 git push와 git pull을 하고 싶을 때 좀 귀찮아집니다.

예를 들어 git push를 하고 싶다면

git push origin master:master

라고 길게 적어줘야만 제대로 실행이 됩니다.

여기서 첫 번째 master는 source(로컬 레포지토리의 master 브랜치), 두 번째 master는 destination(리모트 레포지토리의 master 브랜치)을 의미합니다.

그리고 git pull을 하고 싶을 때도

git pull origin master:master

라고 길게 적어줘야만 합니다.

여기서 첫 번째 master는 source(리모트 레포지토리의 master 브랜치), 두 번째 master는 destination(로컬 레포지토리의 master 브랜치)를 의미합니다.

Git으로 작업을 하다보면 git push, git pull을 자주 실행해야 하는데 매번 이렇게 길게 적어야 한다면 번거롭겠죠?

그래서

(1) 로컬 레포지토리의 특정 브랜치에서 git push, git pull을 할 때

(2) 어느 리모트 레포지토리의(origin), 어느 브랜치(master)를 대상으로 해야하는지에 관한 정보인 tracking connection를 설정하기 위해

(3) 맨 처음에 위에서 살펴본 것처럼 -u(—set-upstream) 옵션을 추가했던 겁니다.

로컬 레포지토리의 내용을 리모트 레포지토리에 처음으로 전송할 때 왜 -u 옵션을 쓰면 좋은지, 이제 아시겠죠?

코드잇 멤버십 유저가 아니라면, 여기서 확인하세요 :)

코드잇 'Git으로 배운 버전 관리' 더 알아보기 >

코드잇 멤버십 유저라면, 여기서 자세히 확인하세요 :)

코드잇 Git 토픽 > 'Git에서 브랜치 사용하기' 챕터 > 'Remote Repository의 브랜치는 이렇게 보입니다!' 노트

기업문화 엿볼 때, 더팀스

로그인

/