
이 글은 2026년 3월 13일 작성된 글입니다.
Git 협업을 진행할 때 브랜치 전략과 pull / push 동작 방식을
이해하는 것은 매우 중요하다.
이번 학습에서는 Git Flow와 GitHub Flow의 차이, 그리고 git pull의
내부 동작 방식을 정리하고 GitHub 협업 과정(PR, Issue, Merge 등)을 직접
실습해 보았다.
Git에는 여러 브랜치 전략이 존재하지만 대표적으로 Git Flow와 GitHub
Flow가 많이 사용된다.
| 구분 | GIT FLOW | GITHUB FLOW |
|---|---|---|
| 브랜치 전략 | 복잡함 (main, develop, feature, release, hotfix) | 단순함 (main, feature) |
| 적합한 분야 | 버전 관리가 필요한 패키지 / 앱 | 지속적 배포가 필요한 웹 서비스 |
| 배포 주기 | 길다 (주 단위, 월 단위) | 짧다 (일 단위, 시간 단위) |
| 장점 | 체계적인 버전 관리 가능 | 빠른 배포와 피드백 가능 |
| 단점 | 프로세스가 복잡하고 느림 | 안정성이 떨어질 수 있지만 자동화 테스트로 극복 가능 |
main
└ develop
└ feature/*
└ release/*
└ hotfix/*
대규모 프로젝트나 버전 관리가 중요한 서비스에서 주로 사용된다.
main
└ feature/*
feature 브랜치를 생성하여 작업 후 Pull Request → 리뷰 → main 병합 →
배포 흐름을 가진다.
주로 지속적 배포(CI/CD)가 필요한 웹 서비스에서 많이 사용된다.
git pull origin main
현재 내가 작업하고 있는 로컬 브랜치에 리모트(origin)의 main 브랜치
내용을 가져와서 적용한다.
병합 방식은 merge이다.
git pull origin main --rebase
현재 로컬 브랜치에 리모트의 main 브랜치 내용을 가져와 적용하지만
병합 방식이 rebase로 동작한다.
git pull origin main 명령은 내부적으로 다음 두 명령이 순차적으로
실행되는 것과 같다.
git fetch origin main
리모트(origin)의 main 브랜치 내용을 로컬 저장소로 가져온다.
git merge FETCH_HEAD
가져온 내용을 현재 브랜치에 병합한다.
즉 git pull은 아래와 같은 과정이다.
fetch → merge
FETCH_HEAD는 가장 최근에 fetch 명령으로 가져온 브랜치의 최신 커밋을
가리키는 참조(reference)이다.
즉 git fetch를 실행하면 원격 저장소의 데이터를 로컬로 가져오고
그 최신 커밋 정보가 FETCH_HEAD에 기록된다.
| 구분 | git pull origin main | git push origin main |
|---|---|---|
| 적용 대상 | 로컬의 현재 브랜치에 리모트의 main 브랜치 적용 | 로컬의 main 브랜치를 리모트의 main 브랜치에 적용 |
(현재 브랜치 : test) git pull origin main
(현재 브랜치 : test) git push origin main
| 구분 | git pull origin main | git pull origin main --rebase |
|---|---|---|
| 병합 방식 | merge | rebase |
| 커밋 히스토리 | 병합 커밋 생성 → 히스토리 복잡 | 일자형 히스토리 |
| 충돌 해결 | 한 번에 충돌 해결 | 커밋별로 순차적 해결 |
| 장점 | 이력이 보존됨 | 깔끔한 커밋 이력 |
| 단점 | 커밋 히스토리가 복잡해짐 | 이력이 변경됨 |
| 권장 상황 | 동일 파일 작업이 적을 때 | 동일 파일 작업이 많을 때 |
GitHub 협업 흐름을 직접 실습해 보았다.
실습 내용
GitHub 협업 흐름은 일반적으로 다음과 같다.
Issue 생성
↓
Feature Branch 생성
↓
개발 진행
↓
Pull Request 생성
↓
Code Review
↓
Merge
특히 squash merge를 사용하면 여러 커밋을 하나로 합쳐 깔끔한 커밋
히스토리를 만들 수 있다.
git pull은 내부적으로 fetch + merge 과정으로 동작--rebase 옵션을 사용하면 커밋 히스토리를 깔끔하게 유지할 수Git을 단순한 버전 관리 도구라고 생각했지만
실제로는 협업을 위한 작업 흐름을 관리하는 시스템이라는 것을 느꼈다.
특히 GitHub에서 PR 생성, 리뷰, squash merge 과정을 직접 경험하면서
팀 프로젝트에서 코드가 어떤 흐름으로 관리되는지 이해할 수 있었다.
사실 그동안 독학과 단독 프로젝트 위주로 공부해왔던 나는
익숙하지 않지만, 앞으로 팀 프로젝트를 진행하면서
브랜치 전략과 PR 흐름을 자연스럽게 활용할 수 있도록 익숙해져야겠다.