[git] 원격 저장소와 로컬 저장소 간의 차이점과 rebase/fetch 사용 방법

Xabi·2025년 5월 26일

git

목록 보기
2/2
post-thumbnail

1. 원격 저장소 vs 로컬 저장소

원격 저장소 (Remote Repository) = 공유 공간

  • 서버에 호스팅된 Git 저장소 (ex. GitHub, GitLab, Bitbucket 등의 서비스가 이에 해당함)
  • 이 저장소에는 여러 개발자가 협업할 수 있도록 공유된 브랜치와 커밋들이 포함되어 있음
  • 'origin'은 보통 기본 원격 저장소의 이름으로 사용되며, 다른 사람의 컴퓨터나 서버에 접근할 수 있는 저장소임

로컬 저장소 (Local Repository) = 내 작업 공간

  • 개인의 컴퓨터에 위치한 Git 저장소
  • 이 저장소에는 작업하는 소스 코드, 브랜치, 커밋 기록 등을 포함

2. 원격 브랜치 vs 로컬 브랜치

원격 브랜치 (Remote Branch)

  • 원격 저장소에 있는 브랜치
  • 서버에 있는 브랜치
  • ex. origin/main, origin/staging

로컬 브랜치 (Local Branch)

  • 로컬 저장소에 있는 브랜치
  • PC에서 작업하고 있는 브랜치
  • ex. main, staging, feature

3. origin/main 브랜치 vs main 브랜치

origin/main

  • 위치 : 로컬 저장소 내부의 원격 추적 브랜치
  • 설명 : git fetch로 업데이트됨. 원격 서버에 있는 main 브랜치의 복사본

서버의 main 브랜치가 어떤 상태인지 알려주는 참고용 브랜치이다!

main

  • 위치 : 로컬 브랜치
  • 설명 : 내가 직접 커밋하거나 작업하는 브랜치

4. 기본 프로세스 흐름

[원격 저장소]
     ^        ^
   push     fetch/pull
     v        v
[로컬 저장소] <- rebase 등 로컬 브랜치 작업

5. 원격 변경사항을 로컬 브랜치에 반영하는 방법

origin/main -> main 에 반영하려면, merge or rebase 필요

merge 방식

git fetch origin
git checkout main
git merge origin/main
  • 로컬 main 브랜치에 원격 변경사항을 병합
  • 머지 커밋이 생길 수 있음 (히스토리 분기됨)

rebase 방식 (더 깔끔한 히스토리 구현)

git fetch origin
git checkout main
git rebase origin/main
  • 로컬 main의 커밋들을 origin/main 위에 다시 쌓음
  • 머지 커밋 없이 히스토리를 일자로 유지

6. git fetch

  • 원격 저장소의 변경 사항을 로컬 저장소로 가져오는 명령어
  • 원격 저장소의 최신 변경사항을 가져오기만 하고, 내 로컬 브랜치에는 적용하지 않음!

ex. git fetch origin

  • 원격 저장소의 모든 브랜치 정보를 가져옴
  • 원격 브랜치(ex. origin/main) 정보가 최신 정보로 업데이트됨
  • 하지만, 내 로컬 브랜치(main)에는 아직 반영되지 않음!

장점

  • git fetch를 통해,
    원격과 내 브랜치가 얼마나 다른지 확인 가능
    충돌없이 안전하게 원격 상태를 미리 볼 수 있음

7. git rebase

  • 내 로컬 브랜치의 변경사항을, 다른 브랜치 위에 다시 적용해서 히스토리를 깔끔하게 유지하는 명령어

ex. git rebase origin/main

  • 로컬의 현재 브랜치(ex. feature)를 원격의 origin/main 브랜치의 커밋을 기준으로 리베이스
  • origin/main : 로컬의 origin 라는 이름을 가진 원격 브랜치를 가리키며, 원격의 상태를 참고
  • 실행 직전 fetch를 하지 않았다면 origin/main 최신 상태가 아닐 수 있음!
    이 경우, 리베이스 작업이 이전 상태 기준으로 실행될 수 있음

동작방식

  • 1) 로컬 브랜치에서 내가 만든 커밋들을 떼어낸다.
  • 2) origin/main 최신 커밋 위에 순서대로 다시 붙인다. (재적용)

8. 작업 순서

# 1. 원격 변경사항 가져오기 (최신 main 가져오기)
git fetch origin

# 2. rebase로 최신 main 위에 내 작업 재적용 (내 브랜치 최신화)
git rebase origin/main

# 3. 충돌 해결 후 계속
git rebase --continue

# 4. 다 끝났으면 원격에 push (강제해야 할 수도)
git push --force-with-lease

이점

  • 커밋 로그가 깔끔하게 한 줄로 이어짐
  • 머지 커밋 없이, 내 작업만 딱 올라감
  • 협업 시 충돌 방지와 가독성 향상

9. fetch vs pull 차이점

  • fetch : 원격 내용 가져오기만 함 / 자동병합 or 재배치 X
  • pull : fetch + merge (or rebase) / 자동병합 or 재배치 O
# 아래 두 줄은 결국 같은 효과
git fetch origin
git merge origin/main

# 또는
git pull --rebase

10. 결론

  • 원격 = 서버의 Git 저장소
  • 로컬 = 내 PC의 Git 저장소
  • 원격 브랜치 = 서버의 브랜치 (예: origin/main)
  • 로컬 브랜치 = 내 PC의 브랜치 (예: main)

'origin'이라는 용어는 원격 저장소를 의미하는 것이 맞고, origin/main은 원격 저장소에 위치한 main 브랜치를 나타낸다.
git fetch origin 후에 origin/main 상태가 업데이트되었음을 확인한 후에야 git rebase origin/main 명령을 사용하여 안전하게 리베이스를 수행할 수 있다.

profile
롱런하는 개발자!

0개의 댓글