페치
고친 사람 github-actions[bot]
페치는 원격 저장소에 새로 쌓인 커밋을 내 컴퓨터로 받아만 두는 일입니다. 받아 온 커밋은 내가 지금 쓰는 브랜치에 바로 합쳐지지 않고 따로 보관됩니다. 그래서 페치를 부른 직후에는 내 작업 파일이 하나도 바뀌지 않습니다. 원격에 무엇이 새로 올라왔는지 먼저 살펴보고 싶을 때 이 동작을 부릅니다.
쉽고 빠른 이해
페치는 원격 저장소에 쌓인 새 커밋을 내 컴퓨터로 내려받는 일입니다. 동료가 어제 올려 둔 커밋 다섯 개를 내 컴퓨터로 가져와 미리 살펴보는 것이 그 예입니다.
페치가 없으면 원격에 무엇이 올라왔는지 내 컴퓨터에서 알 길이 없습니다. 살펴보지 않고 바로 합치면, 나중에 충돌이 나도 무엇이 왜 부딪혔는지 짚기 어렵습니다.
어떻게 도나:
- 원격 저장소에 내가 갖지 않은 커밋이 있는지 물어봅니다
- 없는 커밋만 받아 내 컴퓨터에 쌓아 둡니다
- 원격의 위치를 가리키는 이름표만 새 커밋 쪽으로 옮기고, 내가 쓰던 브랜치는 손대지 않습니다
받아만 두고 합치지는 않으므로, 최신으로 작업하려면 뒤이어 합치는 절차를 한 번 더 불러야 합니다. 지금 바로 작업 파일을 최신으로 맞추려면 풀을 부르고, 무엇이 올라왔는지 먼저 살펴만 보고 싶을 때 페치만 부릅니다.
상세
이 절은 우편함 비유로 페치가 무엇을 옮기고 무엇을 안 옮기는지 먼저 본 다음, 짝을 이루는 동작인 풀과 어떻게 갈리는지, 어느 브랜치를 받을지 고르는 법을 봅니다. 마지막으로 버전관리 밖에서 같은 이름을 쓰는 다른 분야를 봅니다.
우편함 앞 선반에 갖다 두기
회사 우편함에 새 우편물이 왔다고 해 봅시다. 우편물을 확인하고 내 자리 옆 선반에 옮겨만 두었다면, 아직 그 우편물을 뜯어 처리한 것은 아닙니다. 선반에 있다는 것과 내 책상 위에서 다루고 있다는 것은 다릅니다.
페치가 옮기는 것
여럿이 한 프로젝트를 고치면 각자의 컴퓨터에 각자의 작업 기록이 따로 쌓입니다. 동료가 무엇을 언제 고쳤는지는 내 컴퓨터 안에 없습니다. 그 기록을 받아 와야 동료의 작업 위에 내 작업을 이어 갈 수 있습니다.
페치는 Git 같은 버전관리 도구에서 원격 저장소에 쌓인 새 커밋을 내 컴퓨터로 받아 와 쌓아 두는 동작입니다. 커밋은 그때까지 고친 내용을 하나로 묶어 확정한 기록이고, 원격 저장소는 내 저장소 밖에 따로 있는 같은 프로젝트의 저장소입니다.
페치는 부를 때마다 그사이 새로 쌓인 커밋만 골라 받습니다. 이미 내 컴퓨터에 있는 커밋을 두 번 받지는 않습니다.
받아 온 커밋이 어디까지 왔는지는 원격 추적 브랜치라는 이름표가 기억합니다.
원격 추적 브랜치는 원격 저장소의 어느 브랜치가 최근에 어느 커밋까지 왔는지를 내
컴퓨터 안에 적어 두는 이름입니다. origin/main 처럼 원격 이름과 브랜치 이름을 붙여
부릅니다.
페치를 부르면 이 이름표만 새 커밋 쪽으로 옮겨 가고, 내가 지금 쓰는 브랜치는 움직이지 않습니다. 브랜치는 이력을 갈라 따로 이어 가는 한 줄기이고, 줄기의 끝이 어느 커밋인지를 이름 하나가 가리킵니다.
flowchart TD
subgraph 전["페치를 부르기 전"]
A1["원격 추적 브랜치 · 커밋 A"]
A2["내 브랜치 · 커밋 A"]
end
subgraph 후["페치를 부른 뒤"]
B1["원격 추적 브랜치 · 커밋 B"]
B2["내 브랜치 · 커밋 A"]
end
A1 -->|"새 커밋을 받아 이름표를 옮긴다"| B1
A2 -->|"손대지 않는다"| B2
원격에는 이미 커밋 B가 올라와 있었지만, 페치를 부르기 전에는 내 컴퓨터가 그 사실을 몰라 이름표가 여전히 커밋 A를 가리켰습니다. 페치를 부른 뒤에는 이름표만 커밋 B로 옮겨 가고, 내 브랜치는 그림 오른쪽처럼 커밋 A에 그대로 머뭅니다.
페치가 손대지 않는 것
페치는 받아만 두고 합치지 않으므로 내가 고치던 파일은 하나도 바뀌지 않습니다. 받아 온 커밋을 먼저 살펴보고 내 작업에 합칠지 말지 그다음에 정할 수 있습니다.
받아 오자마자 내 브랜치에 합치는 동작은 풀이라는 다른 이름으로 부릅니다. 풀은 페치와 합치기를 잇달아 하는 동작이라, 페치까지만 하고 멈추면 합치는 절차를 아직 안 부른 것과 같습니다. 무엇이 들어오는지 보기 전에 내 작업이 바뀌는 일을 막고 싶을 때 풀 대신 페치만 부릅니다.
반대로 지금 바로 작업 파일을 최신으로 맞추고 싶다면 페치만으로는 부족합니다. 그럴 때는 풀을 부르거나, 페치를 부른 뒤에 합치는 절차를 이어서 불러야 합니다.
어느 브랜치를 받을지 고르기
원격 저장소에는 브랜치가 여럿 있을 수 있고, 페치는 그중 무엇을 받을지 고를 수 있습니다. 이름을 하나도 안 대면 등록된 원격의 브랜치를 전부 받습니다.
git fetch # 원격 전부를 받는다
git fetch origin main # main 브랜치만 받는다
첫 줄은 원격에 등록된 모든 브랜치의 새 커밋을 한 번에 받고, 둘째 줄은 origin이라는
원격의 main 브랜치 하나만 짚어서 받습니다. 브랜치가 많은 저장소에서 지금 볼 것만 빠르게
받고 싶을 때는 둘째 꼴을 씁니다.
버전관리 밖에서도 쓰는 페치
다른 분야에서도 페치라는 말을 씁니다. 뿌리는 같습니다. 어딘가에 있는 것을 가져와 내가 쓸 수 있게 둔다는 뜻입니다.
데이터베이스에서는 커서가 가리키는 다음 행을 읽어 오는 동작을 페치라고 부릅니다.
커서는 조회 결과를 한 줄씩 순서대로 짚어 가는 표시입니다. 표준
SQL(Structured Query Language, 구조화 질의어) 문법의 FETCH NEXT 처럼 이 이름이
그대로 남아 있는 경우가 많습니다.
웹 브라우저에는 서버에 있는 자료를 요청해 받아 오는 내장 함수가 있고, 그 이름도
fetch입니다. HTTP(HyperText Transfer Protocol, 하이퍼텍스트 전송 프로토콜)
요청을 보내고 응답을 돌려받는 절차 전체를 이 함수 하나로 부릅니다.
컴퓨터 내부에서는 다음에 실행할 명령어를 메모리에서 읽어 오는 단계를 페치라고 부릅니다. 프로세서는 페치, 해석, 실행을 되풀이하며 명령어를 하나씩 처리합니다.
분야는 다르지만 세 경우 모두 다른 곳에 있는 것을 내 쪽으로 가져와 쓸 수 있게 한다는 점은 같습니다.
관련 항목
페치가 상대하는 저장소와 그 이력
원격 저장소 · 저장소 · origin · 원격 추적 브랜치 · Git
페치가 받아 오는 기록의 단위
페치 뒤에 이어지는 동작
페치와 짝을 이루는 주고받기 동작
페치라는 이름을 나눠 쓰는 다른 분야
다른 이름: fetch · git fetch