🏛️ [Archive] 개발 프로젝트 & 회고/GitHub 관리 도구 🛠️

업스트림 동기화 & Rebase 이해

히주 2025. 2. 18. 22:47

 

🔍 배경 설명

협업 중 내가 작업하던 코드와 다른 팀원의 수정 코드가 충돌할 가능성이 있음!
이를 해결하려면 업스트림의 최신 변경 사항을 내 로컬 브랜치에 반영하는 과정이 필요함.

📌 예제 상황

  • 나는 feature/my-feature 브랜치에서 작업 중
  • 다른 팀원이 main 브랜치에서 같은 부분을 수정하여 업스트림(upstream)에 반영함
  • 이를 모르던 나는 나중에 git fetch upstream을 해서 최신 변경 사항이 있음을 알게 됨
  • 최신 변경 사항을 내 작업 브랜치에 반영하려면 어떻게 해야 할까? 🤔

 

1. 최신 변경 사항 가져오기

업스트림(upstream)의 최신 변경 사항을 가져오고 내 로컬 main 브랜치를 최신 상태로 유지하는 과정

git fetch upstream  # (1) 최신 변경 사항 가져오기
git checkout main   # (2) 내 로컬 main 브랜치로 이동
git merge upstream/main  # (3) 내 로컬 main을 최신 상태로 병합
git push origin main  # (4) 내 GitHub 저장소(origin)에도 반영

📌 결과
업스트림(main)의 최신 코드가 내 로컬 main과 동기화됨
이제 내 작업 브랜치(feature/my-feature)에도 최신 변경 사항을 반영해야 함

 

2. 내 작업 브랜치에 최신 변경 사항 반영하기

업스트림(main)과 동기화된 내 로컬 main을 바탕으로 작업 브랜치를 업데이트하는 방법은 두 가지가 있음.

🟢 방법 1: git merge main (머지)

git checkout feature/my-feature  # (1) 내 작업 브랜치로 이동
git merge main  # (2) 최신 main을 내 작업 브랜치에 병합

📌 특징
충돌 해결이 쉬움
머지 커밋(Merge Commit)이 생겨 히스토리가 복잡해질 수 있음

 

🟢 방법 2: git rebase main (리베이스, 깔끔한 히스토리 유지)

git checkout feature/my-feature  # (1) 내 작업 브랜치로 이동
git rebase main  # (2) 최신 main을 기반으로 내 브랜치 정리

📌 특징
히스토리가 깔끔해짐 (불필요한 Merge Commit 없음)
충돌이 발생하면 해결해야 함 (다소 번거로울 수 있음)

 

3. git rebase 충돌 해결 방법

리베이스 중 충돌(conflict)이 발생하면 Git이 알려줌!
수정 후 다시 리베이스를 계속 진행하면 됨.

⚠️ 리베이스 중 충돌 발생 시 해결 방법

git add <충돌 해결한 파일>
git rebase --continue  # 리베이스 계속 진행

🚨 만약 충돌이 너무 많아서 되돌리고 싶다면?

git rebase --abort  # 원래 상태로 되돌리기

📌 주의: git rebase 후에는 히스토리가 변경되므로 강제 푸시 필요할 수도 있음

git push origin feature/my-feature --force  # 강제 푸시

 

⁉️ git rebase가 꼭 필요한가?

🚀 필수는 아니지만, 히스토리를 깔끔하게 유지하고 싶다면 사용하는 것이 좋음!
그냥 최신 내용을 반영하고 싶다면 git merge main으로 충분함
팀에서 "Merge Commit이 많으면 보기 어려우니 깔끔하게 유지하자"는 규칙이 있다면 git rebase main이 더 좋음