포스트

[GitHub 100일 챌린지] Day 34 - git fetch 활용

[GitHub 100일 챌린지] Day 34 - git fetch 활용

100일 챌린지 Day 34 - 안전하게 원격 변경사항을 확인합니다

배울 내용

  1. fetch vs pull 차이
  2. 원격 브랜치 확인
  3. 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 라이센스를 따릅니다.