기능
- 로컬 리포지토리의 커밋을 원격 리포지토리에 업로드한다.
형식
git push # 업스트림이 설정되어 있는 경우: 리모트명, 브랜치명 생략 가능
git push {리모트명} {브랜치명}
git push {리모트명} :{브랜치명} # 원격 리포지토리의 해당 브랜치 제거
git push {리모트명} {브랜치명}:{다른브랜치명} # 현재 로컬 브랜치의 커밋을 다른 원격 브랜치에 푸시
옵션
-u / -set-upstream # 원격 브랜치에 푸시하면서 업스트림 지정(이후 git push만으로 푸시 가능)
--tags # 로컬에 있는 모든 태그를 원격에 푸시
--all # 로컬의 모든 브랜치를 원격에 푸시
--no-verify # 푸시 전후의 훅을 실행하지 않고 푸시
--recurse-submodules=on-demand # 서브모듈이 존재할 경우, 서브모듈의 변경사항도 함께 푸시
# 굉장히 유용한 옵션
--dry-run # 실제 푸시를 수행하지 않고 어떤 작업이 수행될지 시뮬레이션
# 주의할 옵션들
-f / --force # 로컬 브랜치의 커밋 히스토리를 원격 브랜치에 강제로 덮어쓴다.
--force-with-lease # 강제 푸시의 안전한 버전. 원격 브랜치가 예상치 못한 변경사항을 포함하면 푸시를 중단
--delete # 원격 브랜치 삭제(git push origin --delete {브랜치명}
--mirror # 리포지토리의 모든 브랜치와 참조를 원격에 그대로 동기화 (매우 주의해야 함)
예시
git push origin dev # 원격 dev 브랜치에 푸시
git push origin :feature # 원격 리포지토리의 feature 브랜치 삭제
git push origin --delete feature # 원격 리포지토리의 feature 브랜치 삭제
git push origin --all # 로컬 리포지토리의 모든 브랜치를 푸시
git push origin --tags # 원격 리포지토리에 로컬의 모든 태그 푸시
git push origin HEAD:main --dry-run # 현재 브랜치의 커밋을 원격 main 브랜치에 푸시했을 때 발생할 상황을 시뮬레이션
업스트림 브랜치
<1> 확인
# 로컬에 존재하는 모든 브랜치의 업스트림 브랜치 확인
git branch -vv
# 현재 브랜치의 업스트림 브랜치 확인
git rev-parse --abbrev-ref --symbolic-full-name @{u}
<2> 설정
# 업스트림 브랜치만 설정
git branch --set-upstream-to=<remote>/<branch>
git branch --set-upstream-to=origin/dev # 예시
git branch --set-upstream-to=origin/HEAD # 현재 브랜치명이 뭔지 잠시 잊었을 때 꿀팁(현재 로컬 브랜치와 같은 이름의 원격 브랜치로 설정)
# pull 하면서 설정(pull은 -u가 없음)
git pull <remote> <branch> --set-upstream
# push하면서 설정
git push -u <remote> <branch>
git push <remote> <branch> --set-upstream