push · pull · fetch
git push와 git pull의 역할
git push: 로컬 레포지토리의 브랜치 내용을 리모트(원격) 레포지토리로 보내는 명령어git pull: 리모트 레포지토리의 브랜치 내용을 내 로컬 레포지토리로 가져와서 Merge하는 명령어


- 동시 작업으로 인한 충돌 상황
- 여러 개발자가 같은 리모트 브랜치에서 작업하면, 다른 개발자가 내용을 업데이트할 수 있어요.
- 자신이 작업하고 push하기 전에, 리모트에서 먼저 수정된 내용이 있으면 바로 push할 수 없어요. 이때 오류가 발생해요.
- 해결 방법
- 이럴 때는 반드시
git pull을 먼저 해서, 리모트에 있던 최신 내용을 내 로컬 브랜치로 가져오고, 자동으로 머지(merge)를 하게 돼요. - 만약 수정 내용이 겹치면, merge conflict(충돌)이 발생해요. 이때는 파일을 열어서 충돌 부분을 원하는 대로 수정하고, 저장한 뒤
git add .와 커밋을 다시 해주면 돼요.
- 이럴 때는 반드시
- 정상적인 push까지 흐름
- 충돌 해결 및 커밋까지 완료하면, 이제
git push를 하면 리모트 레포지토리에 내 변경사항이 정상적으로 업로드돼요.
- 충돌 해결 및 커밋까지 완료하면, 이제
- 핵심 정리
- 협업하다 보면 git push 전에 git pull을 자주 해야 해요.
- git pull은 리모트 브랜치를 내 브랜치에 merge하는 작업이에요.
- 충돌이 나면 침착하게 conflict를 해결하고, 커밋한 뒤 push하면 돼요.
git fetch 커맨드
- git pull
- 리모트 레포지토리의 branch를 가져와서 내 로컬 branch에 자동으로 merge까지 해줍니다.
- 바로 합치고 싶을 때 편하게 사용할 수 있어요.
- git fetch
- 리모트 레포지토리의 branch 커밋들을 가져오기만 하고, 자동으로 merge하지는 않아요.
- 가져온 후에 merge할지 말지를 직접 결정할 수 있습니다.
- merge하기 전에 내용이 어떤지 검토하거나, 비교해보고 싶을 때 사용해요.
- 차이점
- git pull: fetch + merge를 한 번에 해줌
- git fetch: 가져오기만 하고 merge는 직접
- 실전 예시
- 다른 개발자가 잘못된 코드를 push한 경우, git pull을 바로 하면 잘못된 코드가 내 코드에 바로 합쳐질 수 있음.
- 그래서 git fetch로 먼저 코드만 가져와서 git diff 명령어로 로컬 branch와 리모트 branch의 차이점을 비교해 볼 수 있음.
- 문제가 발견되면, 직접 수정해서 push하거나, 해당 개발자에게 고치게 요청할 수도 있음.
- 정리
- 바로 합쳐도 괜찮으면 git pull
- 한 번 검토하고 싶으면 git fetch + git diff
정리
| 명령어 | 하는 일 |
|---|---|
git push | 로컬 브랜치 내용을 리모트로 보내기 |
git pull | 리모트 내용을 가져와서 자동으로 merge (fetch + merge) |
git fetch | 가져오기만 하고 merge는 직접 결정 (git diff로 검토 후) |
- 리모트가 더 최신이면 push가 거절되므로, push 전에 pull부터
참고: 개인 Notion 학습 노트 (Git 공부)
