본문 바로가기

2023년 이전/깃과 버전 관리

Git 원격 저장소 연결 및 업로드(git remote add, git push, git pull)

우선 git push를 하기 위해선 local repository(로컬 저장소)와 remote repository(원격 저장소)를 연결시켜야 합니다.

 

git remote add origin {연결할 원격 저장소 주소}

 

 

 

origin은 원격 저장소를 가리키는 별칭입니다. 깃허브의 기본 설정 상 origin이라고 되어 있으나, 본인 판단에 따라 다르게 설정할 수도 있습니다.

 

원격 저장소를 가리키는 별칭을 확인하는 방법은 다음과 같습니다.

git remote -v

 

 


git push : 로컬 저장소의 파일을 원격 저장소에 업로드

 

git push -u origin master
# -u 옵션은 local repository의 branch를 local repository branch에 연결하기 위한 것, 처음 한번만 쓰면 된다.
# -u 옵션을 붙이면 다음부터 git push 명령만으로 원격 저장소의 master 브랜치에 커밋을 올릴 수 있다.

 

위에서 master가 기본 branch 브랜치 이름이기 때문에 저렇게 예시를 들었습니다. 깃허브의 기본 브랜치 이름은 master로 설정되어 있습니다.

만약 여러 명과 협업하고 브랜치를 여러 개 만든 상황이라면, 자신이 작업하고 있는 코드의 브랜치 이름이 master가 아닐 수도 있습니다. 현재 브랜치를 확인하는 법은 다음과 같습니다.

 

git branch

 

다만 master 브랜치 이름을 함부로 바꾸거나, 삭제하는 걸 추천하지 않습니다.

 

예를 들어 팀원들이 각자 진행하고 있는 브랜치를 A, B, C...라 했을 때, 결국 A, B, C 브랜치를 master 브랜치에 합쳐 변화를 모두 반영하기 때문에 최종적으로 master 브랜치에 프로젝트의 완성된 버전이 반영이 됩니다. 즉 master branch는 주(main) 버전 브랜치라고도 할 수 있습니다. 


git pull : 원격 저장소의 파일을 로컬 저장소로 가져오기

 

깃허브 원격 저장소에 수정, 추가된 파일이 있다면 제 로컬 저장소에 가져오는 방법이 있습니다.

git pull origin master

 


git fetch : 원격 브랜치의 정보를 가져오기

git fetch는 git pull과 마찬가지로 원격 저장소에서 정보를 가져오는 건 같은 맥락이지만, 엄연히 다른 개념입니다.

 

git pull은 원격 브랜치의 commit을 가져와 로컬 저장소와 합친다면,

git fetch는 단지 원격 브랜치에서 수정, 추가된 파일에 대한 정보만 가져옵니다.

 

 

그래서 우선 다른 사람의 커밋을 자신의 로컬 저장소에 합치기 전에, 다른 사람이 어떻게 파일을 수정했는지 검토하고 싶을 때 git fetch를 쓰면 됩니다.

 

git fetch로 가져온 정보는 FETCH_HEAD라는 브랜치로 가져오기 때문에 로컬 저장소에 바로 반영되지 않습니다.

그래서 git fetch로 가져온 최신 커밋을 살펴보고 싶다면 

 

git checkout FETCH_HEAD

을 통해 확인하면 됩니다.

 

 

최신 커밋을 현재 브랜치와 합치고 싶다면, git pull을 사용할 수도 있고 아니면 FETCH_HEAD 브랜치를 git merge를 통해 병합할 수도 있습니다.

 

 


깃허브 협업 : git pull을 먼저 하고 git push를 해야 하는 이유

깃허브로 협업을 하게 되면 여러 팀원이 같은 파일을 수정하고 한 원격 저장소에 올리는 상황이 발생할 수 있습니다.

팀원마다 브랜치를 만들어서 코드를 수정하고, 중간마다 pull request를 해서 master 브랜치에 병합하는 식으로 전체 파일을 업데이트하게 됩니다.

 

그래서 저의 커밋을 원격 저장소에 올리기 전에는 다른 팀원이 올린 커밋(변경 내용)을 우선 반영(git pull)한 다음에 제 커밋을 반영(git push)하는 게 순서에 맞습니다.

 

같은 원리로 저 혼자서 작업을 수행한다고 하더라도 기존의 똑같은 branch로 다른 작업을 Push하게 되면 충돌이 발생할 수 있습니다.

 

서로 다른 로컬 git repository를 같은 branch로 push할 때 발생하는 오류