[GitHub 100일 챌린지] Day 34 - git fetch 활용
[GitHub 100일 챌린지] Day 34 - git fetch 활용
100일 챌린지 Day 34 - 안전하게 원격 변경사항을 확인합니다
배울 내용
- fetch vs pull 차이
- 원격 브랜치 확인
- fetch 활용 전략
Topic1. fetch vs pull 차이
git fetch = 안전하게 다운로드만
pull과 달리 자동으로 merge하지 않습니다.
기본 차이
git fetch:
1
2
3
git fetch origin main
# Remote 변경사항만 다운로드
# 로컬 브랜치는 그대로 유지
git pull:
1
2
3
git pull origin main
# = git fetch + git merge
# Remote 변경사항을 다운로드하고 자동 merge
동작 방식 비교
fetch 동작:
1
2
3
4
5
Remote (origin/main)
↓ fetch
origin/main (로컬 복사본)
main (로컬 브랜치) ← 영향 없음
pull 동작:
1
2
3
4
5
Remote (origin/main)
↓ fetch
origin/main (로컬 복사본)
↓ merge
main (로컬 브랜치) ← 자동 업데이트
언제 fetch를 쓸까?
fetch가 좋은 경우:
1
2
3
4
1. 변경사항 먼저 확인하고 싶을 때
2. 안전하게 검토 후 merge하고 싶을 때
3. 여러 브랜치 상태를 확인할 때
4. 작업 중인 내용이 있을 때
pull이 좋은 경우:
1
2
3
1. 빠르게 최신 상태로 업데이트
2. 충돌 없을 것이 확실할 때
3. 단순한 업데이트
해보기: fetch와 pull 비교
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 1. fetch로 확인
git fetch origin main
# 2. 차이 확인
git log main..origin/main
# Remote에 있는 새 커밋 확인
# 3. 검토 후 merge 결정
git diff main origin/main
# 변경사항 자세히 확인
# 4. 문제없으면 merge
git merge origin/main
# 또는 처음부터 pull
git pull origin main
# (fetch + merge 한번에)
결과: fetch는 안전하게 확인 후 merge할 수 있습니다
Topic2. 원격 브랜치 확인
fetch 후 원격 브랜치 상태를 확인하는 방법입니다.
원격 브랜치 목록
1
2
3
4
5
6
7
8
9
# 모든 브랜치 확인
git branch -a
# 출력 예시:
# * main
# feature/login
# remotes/origin/main
# remotes/origin/feature/login
# remotes/origin/dev
색상 의미:
1
2
3
* main ← 현재 브랜치 (로컬)
feature/login ← 로컬 브랜치
remotes/origin/* ← 원격 브랜치
원격 브랜치 상세 정보
1
2
# Remote 상세 정보
git remote show origin
출력 예시:
1
2
3
4
5
6
7
8
9
10
11
12
* remote origin
Fetch URL: https://github.com/username/repo.git
Push URL: https://github.com/username/repo.git
HEAD branch: main
Remote branches:
main tracked
dev tracked
feature/login tracked
Local branch configured for 'git pull':
main merges with remote main
Local ref configured for 'git push':
main pushes to main (up to date)
로컬과 원격 비교
1
2
3
4
5
6
7
8
9
10
11
12
# 1. 로컬이 뒤쳐져 있나?
git log main..origin/main
# Remote에는 있지만 로컬에 없는 커밋
# 2. 로컬이 앞서 있나?
git log origin/main..main
# 로컬에는 있지만 Remote에 없는 커밋
# 3. 양쪽 모두 확인
git log --left-right main...origin/main
# < 로컬 커밋
# > Remote 커밋
fetch로 모든 브랜치 가져오기
1
2
3
4
5
6
7
8
9
10
11
# 모든 Remote 브랜치 fetch
git fetch --all
# 또는 특정 Remote
git fetch origin
# 브랜치 목록 확인
git branch -r
# origin/main
# origin/dev
# origin/feature/login
해보기: 원격 브랜치 탐색
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 1. 모든 브랜치 fetch
git fetch --all
# 2. 브랜치 목록 확인
git branch -a
# 3. 특정 원격 브랜치 내용 확인
git log origin/dev --oneline -5
# 4. 원격 브랜치와 비교
git diff main origin/main
# 5. 원격 브랜치로 전환 (읽기 전용)
git checkout origin/dev
# detached HEAD 상태
# 6. 다시 main으로
git checkout main
결과: 원격 브랜치들을 안전하게 탐색했습니다
Topic3. fetch 활용 전략
실무에서 fetch를 효과적으로 사용하는 방법입니다.
전략 1: 안전한 업데이트
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 1단계: fetch
git fetch origin
# 2단계: 확인
git log --oneline main..origin/main
# 3단계: 충돌 예상되면 branch 생성
git checkout -b test-merge
git merge origin/main
# 테스트 후 문제없으면
# 4단계: 실제 merge
git checkout main
git merge origin/main
전략 2: 주기적 sync
1
2
3
4
5
6
7
8
9
# 아침 작업 시작 전
git fetch --all
git status
# 변경사항 있으면 확인
git log --oneline HEAD..origin/main
# 이상 없으면 merge
git merge origin/main
전략 3: 여러 Remote 관리
1
2
3
4
5
6
7
8
9
10
11
# Origin fetch
git fetch origin
# Upstream fetch (Fork인 경우)
git fetch upstream
# 모두 fetch
git fetch --all
# 상태 확인
git branch -vv
전략 4: Prune으로 정리
1
2
3
4
5
6
7
8
9
# Remote에서 삭제된 브랜치 정리
git fetch --prune
# 또는
git fetch -p
# 삭제된 브랜치 확인
git branch -a
# remotes/origin/deleted-branch가 사라짐
전략 5: 태그 가져오기
1
2
3
4
5
6
7
8
# 모든 태그 fetch
git fetch --tags
# 특정 태그 fetch
git fetch origin tag v1.0.0
# 태그 목록 확인
git tag
해보기: 실전 fetch 워크플로우
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 아침 일과 시작
# 1. 모든 변경사항 가져오기
git fetch --all --prune
# 2. 현재 상태 확인
git status
git log --oneline -3
# 3. Remote 변경사항 확인
git log --oneline HEAD..origin/main
# 4. 변경사항이 있다면 확인
if [ $(git log HEAD..origin/main --oneline | wc -l) -gt 0 ]; then
echo "Remote에 새 커밋이 있습니다"
git log HEAD..origin/main
git diff HEAD origin/main
fi
# 5. 안전하게 merge
git merge origin/main
# 6. 작업 시작!
결과: 안전하고 체계적인 업데이트 워크플로우를 구축했습니다
정리
완료 체크:
- fetch와 pull의 차이를 안다
- 원격 브랜치를 확인하고 비교할 수 있다
- 실무에서 fetch를 활용할 수 있다
핵심 명령어:
1
2
3
4
5
6
7
git fetch origin main # 특정 브랜치 fetch
git fetch --all # 모든 Remote fetch
git fetch --prune # 삭제된 브랜치 정리
git branch -a # 모든 브랜치 확인
git log main..origin/main # Remote 새 커밋 확인
git diff main origin/main # 차이점 확인
git remote show origin # Remote 상세 정보
fetch vs pull:
1
2
3
4
fetch: 다운로드만 (안전)
pull: 다운로드 + merge (빠름)
fetch → 확인 → merge = 안전한 업데이트
다음: Day 35 - Push/Pull 트러블슈팅 →
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.
