Git은 코드의 변경을 추적하고 여러 사람들과 협력하기 위한 분산 버전 관리 시스템입니다.
git pull과 git fetch의 필요성
git pull과 git fetch 는 개발 할 때 정말 많이 사용 하는 git 명령어 중 하나입니다. 둘의 차이를 한 마디로 요약하자면 merge(Merge에 대해 알아보기)를 하는지 안하는지로 구분할 수 있습니다. 이번 글을 통해서 pull과 fetch의 차이에 대해서 명확히 이해할 수 있게 도와드리겠습니다.
git pull 파헤치기
작동 원리
git pull 명령어는 원격 저장소의 변경 사항을 로컬 저장소로 가져와 자동으로 merge합니다.
명령어 구성
명령어 예시
이처럼 명령을 내릴 수 있습니다. 이 명령어는 origin 으로 등록된 원격 저장소의 최신 변경사항을 로컬 저장소로 병합(Merge)하는 명령어 입니다.
다음과 같은 결과값이 나오게 됩니다.
git pull 순서도
graph TD;
A[git pull 명령어 입력] --> B[원격 저장소 연결 확인];
B -->|성공| C[원격 브랜치 변경사항 조회];
B -->|실패| X[에러 출력 및 종료];
C -->|변경사항 있음| D[변경사항 로컬로 가져오기];
C -->|변경사항 없음| Y[작업 완료];
D --> E[로컬과 원격 병합 가능한가?];
E -->|가능| F[자동 병합];
E -->|불가능| Z[병합 충돌 에러 및 종료];
F --> G[병합 완료 및 작업 종료];
git fetch 파헤치기
작동 원리
git fetch 명령어는 원격 저장소의 최신 변경사항을 로컬 저장소로 가져오기만 하는 명령어입니다. git pull 과 달리 merge 를 하지 않습니다.
명령어 구성
명령어 예시
이처럼 명령을 내릴 수 있습니다. 이 명령어는 origin 으로 등록된 원격 저장소의 최신 변경사항을 임시로 생성된 브랜치에 저장합니다.
*임시로 생성된 브랜치 로컬 저장소 중 원격 추적 브랜치(remote tracking branch)에 반영이 됩니다. 가져온 모든 브랜치의 헤드를 .git/FETCH_HEAD 파일에 기록하게 됩니다.
이 명령어는 또한 다음과 같은 결과값이 나오게 됩니다.
git fetch 순서도
graph TD;
A[git fetch 명령어 입력] --> B[원격 저장소 연결 확인];
B -->|성공| C[원격 브랜치 변경사항 조회];
B -->|실패| X[에러 출력 및 종료];
C -->|변경사항 있음| D[변경사항 FETCH_HEAD로 가져오기];
C -->|변경사항 없음| Y[작업 완료];
D --> E[Fetch 완료 및 작업 종료];