Git Push
마지막 업데이트
git push는 로컬 브랜치의 커밋을 그에 대응하는 원격(예: GitHub)에 업로드합니다. 브랜치에 upstream이 설정되면 단순한 git push만으로 충분합니다. 새 브랜치의 첫 푸시는 -u를 사용해 원격 브랜치를 만들고 추적을 설정하므로, 이후의 푸시와 풀에는 인수가 필요 없습니다.
이것들을 터미널 플레이그라운드에서 사용해 보세요 - 브라우저 속 진짜 셸이며 설치할 것이 없습니다.
문법
| Command | What it does |
|---|---|
git push | 현재 브랜치를 upstream으로 푸시 |
git push -u origin feature | 새 브랜치를 푸시하고 upstream 설정 |
git push origin main | 특정 원격과 브랜치로 푸시 |
git push --tags | 모든 로컬 태그를 푸시 |
git push --force-with-lease | rebase 후 안전하게 force push |
흔한 경우
| Goal | Command |
|---|---|
| 완전히 새로운 브랜치 푸시 | git push -u origin feature |
| upstream 설정 후 푸시 | git push |
| 단일 태그 푸시 | git push origin v1.0.0 |
| 원격 브랜치 삭제 | git push origin --delete feature |
실전 예제
| 단계 | 명령어 | 결과 |
|---|---|---|
| 1 | git remote add origin <url> | 로컬 저장소를 origin이라는 이름으로 원격 저장소에 연결합니다 |
| 2 | git push -u origin main | 원격에 main을 만들고, 로컬 main의 upstream으로 설정합니다 |
| 3 | git push | 이후 main에서 하는 푸시에는 인수가 필요 없습니다 |
git push 자주 묻는 질문
git push는 무엇을 하나요?
로컬 브랜치에는 있고 원격 브랜치에는 없는 커밋을 보낸 뒤, 원격 브랜치를 그에 맞게 옮깁니다. 올라가는 것은 커밋뿐입니다. 커밋하지 않은 변경 사항은 내 컴퓨터에 남으므로 먼저 커밋하세요. 원격에 내가 갖고 있지 않은 커밋이 있으면, pull이나 rebase를 하기 전까지 푸시가 거부됩니다.
새 브랜치를 원격에 어떻게 푸시하나요?
git push -u origin <branch>를 실행하세요. -u(--set-upstream의 약자)는 원격에 브랜치를 만들고 로컬 브랜치를 그것에 연결하므로, 이후에는 인수 없이 git push와 git pull이 동작합니다. 원격 브랜치는 이 첫 푸시 전까지는 존재하지 않습니다.git push가 왜 'no upstream branch'라고 하나요?
로컬 브랜치가 아직 원격 브랜치에 연결되지 않았기 때문입니다.
git push -u origin <branch>로 푸시해 원격 브랜치를 만들고 upstream을 설정하세요. 그 후에는 git push만으로도 커밋을 어디로 보낼지 알게 됩니다.태그는 어떻게 푸시하나요?
태그는 기본적으로 푸시되지 않습니다. 단일 태그는
git push origin <tagname>으로, 전부 한 번에는 git push --tags로 푸시하세요. 이것은 흔한 함정입니다 - 로컬에서 만든 태그는 명시적으로 푸시하기 전까지는 원격에 나타나지 않습니다.force push를 어떻게 안전하게 하나요?
히스토리를 다시 쓴 후(rebase 또는 amend)에는
--force 대신 git push --force-with-lease를 사용하세요. 마지막 fetch 이후 다른 누구도 푸시하지 않은 경우에만 원격을 덮어써서 팀원의 작업을 보호합니다. 전체 설명은 git force push 페이지를 참고하세요.git push -u origin main은 무슨 뜻인가요?
origin은 원격 저장소이고(git remote 참고), main은 브랜치이며, -u는 그 원격 브랜치를 로컬 main의 upstream으로 설정합니다. GitHub가 새 저장소를 만들면 보여 주는 바로 그 명령입니다. 한 번 실행하고 나면 main에서 git push와 git pull에 인수가 필요 없습니다.git push와 git pull의 차이는 무엇인가요?
커밋을 서로 반대 방향으로 옮깁니다.
git push는 로컬 커밋을 원격에 올리고, git pull은 원격의 새 커밋을 내려받아 내 브랜치에 병합합니다. non-fast-forward로 푸시가 거부되었다면 대개 먼저 pull을 해야 한다는 뜻입니다. pull이 내부에서 하는 일은 git fetch vs pull에서 확인하세요.이것을 온라인으로 연습할 수 있나요?
네. 터미널 플레이그라운드를 열면 브라우저 속 진짜 셸에서
git push를 실행할 수 있습니다 - 설치할 것이 없습니다. Coddy의 무료 인터랙티브 Git 강좌도 원격 작업을 단계별로 다룹니다.