Computer >> 컴퓨터 >  >> 프로그래밍 >> 프로그래밍

Git push 명령어 완벽 가이드: 원격 저장소에 코드 올리는 방법

git push 명령어는 로컬 저장소의 내용을 원격 저장소에 업로드하는 기능을 합니다. 푸시(push)는 변경 사항을 원격 저장소에 올리는 메커니즘이며, 한 번 푸시된 변경 사항은 프로젝트의 모든 협업자가 다운로드할 수 있습니다.


원격 저장소에 코드를 푸시하는 것은 Git 저장소에 가한 변경 사항을 "저장"하는 마지막 단계입니다.


푸시 과정은 여러분의 컴퓨터에 있는 로컬 저장소에서 해당 로컬 코드와 연결된 원격 저장소로 코드를 전송합니다. 이를 통해 코드베이스에 대한 변경 사항을 프로젝트의 메인 저장소에 안전하게 보관할 수 있습니다.


이 글에서는 예제와 함께 코드 푸시의 기본 개념과 git push 명령어 사용법을 살펴봅니다. 끝까지 읽고 나면 git push 명령어를 능숙하게 활용할 수 있게 될 것입니다.


코드 푸시란?


Git에서 변경 사항을 "저장"하는 것은 일반 파일을 저장하는 것만큼 간단하지 않습니다. Git 저장소에서 파일을 저장하면 변경 사항은 컴퓨터에 기록되지만, Git 저장소가 이를 자동으로 추적하지는 않습니다. 변경 사항을 추적하도록 Git에 직접 알려줘야 합니다.


변경 사항을 추적하려면 먼저 git add 명령어를 사용해 코드를 스테이징 영역(staging area)에 추가해야 합니다. 그다음 git commit 명령어로 변경 사항을 하나의 커밋에 저장할 수 있습니다.


코드를 커밋하면 변경 이력이 기록됩니다. 커밋 내역이 원격 저장소에 나타나게 하려면 커밋을 생성한 후 반드시 코드를 푸시해야 합니다.


코드를 푸시하면 로컬 저장소에서 만든 커밋들이 원격 저장소로 전송됩니다. 예를 들어 팀 프로젝트를 진행 중이라면 먼저 로컬 머신에서 커밋을 생성하고, 모든 사람이 코드를 볼 준비가 되면 원격 저장소로 푸시하여 모든 협업자가 변경 사항을 확인할 수 있게 합니다.


git push 명령어 사용법


git push 명령어는 로컬 저장소의 변경 사항을 원격 저장소에 업로드합니다. 업로드된 변경 사항은 프로젝트의 모든 협업자가 열람하고 다운로드할 수 있습니다.


어떤 의미에서 git push는 git fetch의 반대 동작입니다. git fetch는 원격 저장소의 변경 사항을 가져와 로컬 저장소 복사본에 적용하는 반면, push는 그 반대로 로컬 변경 사항을 원격으로 전송합니다.


git push 명령어의 기본 구문은 다음과 같습니다:


git push <remote name> <branch name>

"remote name" 매개변수는 코드를 푸시할 대상 저장소를 가리킵니다. 이미 저장소를 설정했다면 기본값은 "origin"입니다. 다른 저장소에 푸시하고 싶다면 "remote name" 매개변수로 지정할 수 있습니다.


"branch name" 매개변수는 변경 사항을 푸시할 원격 저장소의 브랜치를 가리킵니다.


예를 들어 로컬 저장소의 변경 사항을 원격 저장소의 "master" 브랜치로 푸시한다고 가정해 보겠습니다. 다음 명령어를 사용하면 됩니다:


git push origin master

명령어 실행 결과:


Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (4/4), 363 bytes | 363.00 KiB/s, done.
Total 4 (delta 0), reused 0 (delta 0)
To https://github.com/jamesgallagher432/demo-repository.git
   3b16026..b53b22d  master -> master

이 예제에서 원격 저장소는 GitHub에 있습니다. 로컬 저장소에 가한 변경 사항이 프로젝트와 연결된 GitHub 원격 저장소로 성공적으로 푸시된 것입니다.


변경 사항을 푸시한 후에는 로컬 머신의 코드와 원격 저장소의 코드가 동일해집니다. 코드가 원격 저장소에 올라갔으므로 팀원들도 우리가 만든 변경 사항을 바로 확인할 수 있습니다.


반대로 코드를 "v1.9" 브랜치로 푸시하고 싶었다면 "master" 대신 "v1.9"라는 브랜치 이름을 지정하면 됩니다.


git push --force (강제 푸시)


git push 명령어를 사용하다 보면 변경 사항을 원격 저장소에 강제로 푸시해야 하는 경우가 생길 수 있습니다.


Git은 원격 저장소의 히스토리와 로컬 히스토리 사이에 충돌이 있으면 코드 푸시를 차단합니다. 예를 들어 원격 저장소에 로컬 머신에 아직 반영되지 않은 커밋이 10개 있다면 코드를 푸시할 수 없습니다.


--force 플래그를 사용하면 저장소에 가한 변경 사항을 "강제 푸시(force push)"할 수 있습니다. 단, force 플래그는 마지막으로 저장소에서 코드를 pull한 이후 원격에서 발생한 변경 사항을 삭제한다는 점에 유의해야 합니다.


--force 플래그는 푸시 과정에서 실수를 했고 그것을 수정했을 때만 사용해야 합니다. 그 외의 경우에는 이 옵션 사용을 피하는 것이 좋습니다. 그래야 Git 저장소에 의도치 않은 변경이 생기는 것을 막을 수 있습니다.


--force 플래그의 구문은 다음과 같습니다:


git push <remote name> <branch name> --force

이 명령어는 코드를 강제로 푸시하며, 충돌로 인해 발생할 수 있는 오류는 무시됩니다.


git push origin master 실전 예제


git push 명령어를 활용하는 일반적인 시나리오를 단계별로 살펴보겠습니다.


로컬 코드를 수정했고 이를 원격 저장소에 푸시하려 한다고 가정해 보겠습니다. 이미 git commit으로 변경 사항을 담은 커밋을 생성했습니다. 코드를 푸시하려면 다음 단계를 따르면 됩니다.


먼저 master 브랜치로 이동해서 최신 상태인지 확인합니다. 로컬 master 브랜치는 우리가 변경 작업을 진행한 브랜치입니다. 다음 명령어로 master 브랜치로 이동할 수 있습니다:


git checkout master
git fetch origin master

git checkout 명령어는 "master" 브랜치로 이동하는 역할을 하고, git fetch는 원격 저장소의 최신 버전을 가져옵니다.


이제 master 브랜치에 가한 변경 사항으로 커밋을 생성합니다:


git add README.md
git commit -m "feat: Make changes to README"

README.md 파일을 스테이징 영역에 추가한 후 커밋을 생성했습니다. 커밋 메시지는 "feat: Make changes to README"입니다. 이 커밋은 현재 로컬 브랜치에만 저장되어 있는 상태입니다.


이제 git push를 실행해 코드를 푸시합니다:


git push origin master

이 명령어를 실행하면 로컬 저장소의 코드가 원격 저장소로 전송됩니다. 푸시 전에 코드가 최신 상태인지 미리 확인했기 때문에 git push 명령어에서 오류 없이 정상적으로 처리됩니다.


마무리


git push 명령어는 로컬 Git 저장소의 변경 사항을 원격 저장소로 "푸시"하는 데 사용됩니다. 변경 사항이 푸시되면 해당 코드베이스에서 작업하는 모든 사람이 여러분의 기여를 즉시 확인할 수 있습니다.


이 글에서는 코드 푸시의 기본 개념과 git push 명령어 사용법, 그리고 --force 강제 푸시까지 알아봤습니다. 이제 여러분도 Git 고수처럼 원격 Git 저장소에 자신 있게 코드를 푸시할 준비가 되었습니다!