[git] git push -u origin master과 git pull origin master의 자세한 의미

Benjamin·2023년 5월 25일
1

git

목록 보기
4/4

git에 레포지토리를 새로 만들면 아래의 작업을 수행한다.
git remote add origin [프로젝트의 GitHub 상 주소]
위 명령어는 remote의 레포지토리를 origin이라는 이름으로 등록하는 과정이다.

그 다음에는 로컬 레포지토리의 내용을 리모트 레포지토리에 전송한다.

이때 처음 전송이면 git push -u origin master명령어를 수행한다.

이 명령어의 뜻을 자세히 알아보자.

git push -u origin master

origin이라는 리모트 레포지토리에 master라는 브랜치를 생성하고, 로컬 레포지토리의 master 브랜치의 내용을 리모트 레포지토리의 master 브랜치에 보내라는 뜻이다.

master가 로컬의 브랜치인지, origin의 브랜치인지 더 이상 헷갈리지 말자!

그럼 -u 옵션은 무엇이고 왜 필요할까?

다른 블로그들을 많이 찾아보니, 보통 이 부분은 신경쓰지않고 그냥 넘어가는것같다.
하지만 나는 이게 무슨뜻이며 왜 사용하는지 궁금해서 알아보고 공부한다.

-u 옵션

우선 -u 옵션은 --set-upstream의 줄임말이다.

이 옵션을 쓰면 로컬 레포지토리의 master브랜치가 리모트 레포지토리의 master브랜치를 항상 추적하도록 설정된다.

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

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:master의 의미는 무엇일까?

첫번째 master는 source(로컬 레포지토리의 master 브랜치)이고, 두번째 master은 destination(리모트 레포지토이리의 master브랜치)이다.

그리고 마찬가지로 git pull을 하고싶을 때에도
git pull origin master:master라고 자세히 적어줘야한다.

여기서의 master:master의미는 무엇일까?

이는 pull이므로 push와 반대로 첫번째 master은 source(리모트 레포지토리의 master브랜치), 두번째 master은 destination(로컬 레포지토리의 master브랜치)를 의미한다.

Git으로 작업을 하면 push, pull을 자주하는데, 매번 이렇게 길게 적으면 번거롭기때문에 처음부터 -u옵션을 줘서 tracking connection을 설정했던것이다.

정리하면 아래와 같다.

📌 로컬 레포지토리의 특정 브랜치에서 git push, pull할 때, 어느 리모트 레포지토리의 어느 브랜치를 대상으로 해야하는지에 관한 정보인 tracking connection을 설정하기위해 맨 처음에 -u옵션을 추가했던것이다.

git pull origin master

git pull origin master에서 master은 가져오고자 하는 원격 저장소의 브랜치이다.


참고
https://www.theteams.kr/teams/8573/post/73282

0개의 댓글