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

코드잇 / 조회수 : 5868

여러분 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의 브랜치는 이렇게 보입니다!' 노트

기업문화 엿볼 때, 더팀스

로그인

/