DevOps

[Git🔥] git push -u 옵션

머털박사 2022. 9. 29. 16:36

해당 포스팅은 git push -u 옵션 option에 대해 다룹니다.

git push는 로컬 git에 저장한 commit을 github와 같은 원격 저장소에 올리는 커맨드입니다. git을 사용하다 보면 종종 로컬과 원격 저장소의 차이에 의해서 오류가 생깁니다. 이때 push -u 옵션이 유용하게 쓰입니다. 해당 포스팅에서는 push의 -u 옵션에 대해 설명할 예정입니다.

들어가며

github 레지스토리 생성시 뜨는 코드

github에 레지스토리를 생성하면 해당 커맨드 라인이 뜨는 걸 볼 수 있습니다. 여기서 확인할 내용은 마지막 git push 커맨드입니다.

git push -u origin main

해당 명령어는 git push로 origin이라는 리모트 레포지토리에 main 브런치에 push 한다는 의미입니다. 그럼 여기에 존재하는 -u 옵션은 무엇을 의미하는 걸까요?

git -u 옵션 알아보기

git push [--all | --mirror | --tags] [--follow-tags] [--atomic] [-n | --dry-run] [--receive-pack=<git-receive-pack>]
       [--repo=<repository>] [-f | --force] [-d | --delete] [--prune] [-v | --verbose]
       [-u | --set-upstream] [-o <string> | --push-option=<string>]
       [--[no-]signed|--signed=(true|false|if-asked)]
       [--force-with-lease[=<refname>[:<expect>]] [--force-if-includes]]
       [--no-verify] [<repository> [<refspec>…​]]

git 공식문서에 push에 사용할 수 있는 다양한 옵션 값이 나온 문법입니다. 확인할 옵션은  [-u | --set-upstream] 해당 옵션입니다. -u옵션은 --set-upstream의 줄임말이기도 합니다. 단순히 단어를 해석하면 upstream을 설정한다는 의미입니다.

-u 옵션은 정확히 어떤 기능을 할까요?

공식문서를 보면 최신 상태이거나 성공적으로 푸시된 모든 분기에 대해 git-pull및 기타 명령어에 참고하는 upstream을 추가합니다, 라고 적혀습니다. 좀 더 간단히 말하자면 로컬 레포지토리와 원격 레포지토리를 연결합니다.

push할 때 git push origin main 이렇게 4단어를 써야하던 일을 한 번 연결만 해주면 git push 명령어만 입력해도 알아서 진행해줍니다. pull도 git pull origin main 라고 적어야할 걸 git pull로 입력 가능하게 해줍니다. git  명령어 단축하기 위한 옵션라고 보면 편합니다.

그럼 여기서 말하는 upstream이란 무엇일까요?

git에서 upstream이란?

upstream은 간단하게 설명하면 원격 저장소입니다. upstream의 사전적 의미인 '상류'라는 뜻 생각해보면 이해하기 쉬워집니다. upstream의 반대되는 개념은 downstrea, 하류입니다. upstream은 원격 레포지토리, downstream은 로컬 레포지토리를 뜻합니다. git을 사용할 때 종종 원격 레포지토리에서 pull을 땅기고 데이터를 내려받는 모습을 생각하면 잘 어울리는 명명입니다.

 

 


참조

https://www.atlassian.com/git/tutorials/syncing/git-push

https://stackoverflow.com/questions/5697750/what-exactly-does-the-u-do-git-push-u-origin-master-vs-git-push-origin-ma

https://pers0n4.io/github-remote-repository-and-upstream/

gitrecipe