git push origin main
도 있고
git push -u origin main
도 있는데 뭐가 다른건지 궁금해서 정리
git push
vs git push -u
git push origin main
: "로컬 main
브랜치의 코드를 origin
이라는 원격 저장소의 main
브랜치에 일단 보내기만 해." 라는 일회성 명령
git push -u origin main
: "로컬 main
브랜치의 코드를 origin
의 main
브랜치에 보낸 후, 앞으로 이 둘을 공식적인 upstream으로 지정해 줘." 라는 지속적인 관계를 설정하는 명령
-u
는 --set-upstream
의 줄임말로, 로컬 브랜치가 원격 저장소의 특정 브랜치를 추적하도록 설정하는 역할
-u
옵션을 사용하면 얻는 2가지 장점한 번 git push -u origin my-feature
로 추적 관계를 설정하고 나면, 그 브랜치에서는 더 이상 길게 명령어를 입력할 필요가 없다.
git push
만 입력하면 된다.git pull
도 마찬가지입니다. 원격 저장소의 변경사항을 가져올 때도 git pull
만으로 가능.추적 관계가 설정되면 git status
명령어가 훨씬 더 유용한 정보를 제공합니다.
# -u를 사용하지 않았을 때의 git status
$ git status
On branch my-feature
nothing to commit, working tree clean
# -u를 사용했을 때의 git status
$ git status
On branch my-feature
Your branch is up to date with 'origin/my-feature'. # <-- 원격 브랜치와의 관계를 명확히 알려줌!
nothing to commit, working tree clean
만약 로컬에서만 커밋한 내용이 있다면, 아래와 같이 원격 브랜치와의 차이를 구체적으로 보여준다.
$ git status
On branch my-feature
Your branch is ahead of 'origin/my-feature' by 2 commits. # <-- 원격보다 2커밋 앞서 나감을 알려줌
(use "git push" to publish your local commits)
nothing to commit, working tree clean
이 정보는 내가 원격 저장소와 얼마나 차이가 나는지, 협업 시 내 코드를 언제 푸시해야 할지 명확하게 판단하는 데 큰 도움이 된다나 뭐라나
새로운 기능 브랜치 생성 및 이동
git switch -c new-login-feature
파일 수정 및 커밋
# (열심히 코드 작업...)
git add .
git commit -m "feat: 새로운 로그인 UI 구현"
원격 저장소에 최초로 푸시 (바로 이때 -u 사용!)
git push -u origin new-login-feature
이 명령을 실행하면, 원격 저장소 origin
에 new-login-feature
브랜치가 생성되고 로컬 브랜치와 영구적인 연결이 만들어짐
추가 작업 및 커밋
# (추가 코드 작업...)
git add .
git commit -m "fix: 로그인 버튼 클릭 시 오류 수정"
이후의 푸시는 간편하게!
# 'git push origin new-login-feature'를 입력할 필요 없음
git push
새로운 브랜치로 이동하고 처음에 push 할 때 -u
를 붙여주면 앞으로는 그냥 git push
만 하면 뒤에 origin~~
안해도 -u
붙인 origin
으로 push 됨 (귀찮음이 줄어듬)