본문 바로가기
  • 실행력이 모든걸 결정한다
Git & Github

[Git] git pull 소개와 git clone과의 차이점

by 김코더 김주역 2021. 4. 9.
반응형

git clone은 아래 포스팅의 [1.저장소 불러오기]에서 설명했다.

2021.04.05 - [Git & Github] - [Git] 저장소 동기화(clone, init, add, commit, remote, push)

 

git pull 명령을 Git 포스팅 초반부에 설명을 했어야 했는데 약간 늦게 설명하는 것 같다.

그래도 git pull 명령은 그냥 넘어가기에는 중요한 명령이기 때문에 늦게나마 다루기로 했다.

 

git pull 명령은 원격 저장소에 있는 프로젝트 내용을 가져오는 역할을 한다.

그러고 보니 git clone도 원격 저장소에 있는 프로젝트 내용을 가져오는 명령이지 않은가?

 

git pull과 git clone은 명백한 차이점이 있다.

먼저, git clone명령을 사용하면 로컬 저장소의 내용이 원격 저장소의 내용과 일치해진다.

기존에 작업중이었던 사람이 git명령을 사용해서 원격 저장소의 내용을 그대로 가져와버리면 기존에 작업했던 내용들은 직접 복구해야 한다. 즉, git clone은 프로젝트에 처음 투입될 때 사용되어야 하는 명령인 것이다.

반면 git pull명령은 원격 저장소의 내용을 가져와서 현재 브랜치와 병합(merge)까지 해주기 때문에, 기존에 작업했던 내용은 유지하면서 최신 코드로 업데이트할 수 있는 것이다.

 

git pull명령은 병합 과정도 포함되어 있기 때문에, pull을 하기 전에 commit을 하지 않으면 덮어쓰기 에러가 발생할 수 있다. 즉 기존 작업에 대해 commit을 미리 해두고 pull을 수행해주자.

 

이제 예시를 보며 pull과정을 정확하게 이해해보자.

 

예시

main 브랜치에는 work1부터 work5까지 빈 파일이 저장(push)되어 있고

 

develop branch에는 work3과 work6을 생성하고 commit까지 해두었다.

work3, work6 역시 모두 빈 파일이다.

 

이제 원격 저장소에 있는 main 브랜치의 내용들을 develop 브랜치로 pull 해볼 것이다.

git pull의 사용법은 아래와 같다.

git pull [원격 저장소 이름] [브랜치 이름]

※ --rebase옵션 : log가 더 깔끔해진다.

 

 

기존에 있었던 work3, work6에 main 브랜치에 있는 work1~work5를 가져와서 병합까지 마친 결과이다. work1~work6까지 모두 나타나있다.

 

이제 콘솔창에 출력된 결과를 확인해보자.

main 브랜치에서 work1~work5를 가져왔는데 work3은 change목록에 보이지 않는다.

이처럼 pull은 기존의 작업 내용을 유지해준다는 사실을 알 수 있다.

만약 work3 내용이 두 브랜치 간에 달랐다면 충돌이 발생했을 것인데, 이 때는 직접 충돌 처리를 해주면 된다.

 

반응형

댓글