본문 바로가기
Git

[Git] `git fetch + rebase`를 이용한 로컬 브랜치 최신화, 그리고 main 브랜치에서 다른 브랜치의 변경사항을 병합(merge)

by clolee 2025. 4. 23.

 

✅ 1. git fetch + git rebase origin/main 전 과정 정리

📦 전제 상황

  • 당신은 feature/login 브랜치에서 작업 중
  • 다른 팀원이 main 브랜치를 업데이트함 (원격 origin/main이 최신 상태)
  • 내가 작업 중인 feature/login 브랜치를 origin/main 위로 정렬하고 싶음

🔁 전체 과정 요약

# 1. 원격 저장소의 최신 브랜치 상태 가져오기
git fetch origin

# 2. 내 브랜치를 최신 main 위로 재정렬
git rebase origin/main

🧠 내부 동작 상세 흐름

1️⃣ git fetch origin

  • 원격 저장소 상태(브랜치, 커밋, 태그 등)를 로컬에 갱신
  • 내 브랜치는 변경되지 않음
  • origin/main이 최신 상태로 업데이트됨
# 확인
git log origin/main --oneline --graph --decorate

2️⃣ git rebase origin/main

  • 내가 origin/main보다 예전 커밋에서 작업을 시작했기 때문에
  • 내 작업 커밋들을 origin/main 최신 커밋 뒤에 재적용(replay)
Before:
origin/main: A — B — C
my-branch:          \ D — E

After:
my-branch: A — B — C — D' — E'  (D, E가 재적용됨)

💥 충돌 발생 시 흐름

예: D 커밋이 main과 겹치는 파일을 수정했을 때

git rebase origin/main

⛔ 충돌 메시지 발생:

CONFLICT (content): Merge conflict in src/App.java
error: could not apply D123abc... Update UI layout

해결 순서

  1. 충돌난 파일 열고 수동으로 수정
  2. 수정 완료 후:
git add src/App.java          # 충돌 해결한 파일 스테이징
git rebase --continue         # 다음 커밋 적용 진행
  1. 다시 충돌나면 위 과정 반복
  2. 끝나면 rebase 완료

💡 실수했거나 중단하고 싶으면?

git rebase --abort

Rebase 시작 전 상태로 완전히 복구됩니다.


✅ 2. main 브랜치에서 다른 브랜치의 변경 사항 병합하기

이제 반대로, main 브랜치에서 feature/login의 변경사항을 합치는 경우입니다.


📌 추천 흐름 (로컬에서)

# 1. main 브랜치로 이동
git checkout main

# 2. 최신 상태로 갱신
git pull origin main

# 3. 병합할 브랜치 merge
git merge feature/login

💥 충돌 발생 시

Auto-merging src/App.java
CONFLICT (content): Merge conflict in src/App.java

해결:

  1. 충돌난 파일 수정
  2. 수정한 파일 add
git add src/App.java
  1. 병합 완료:
git commit

→ 자동으로 병합 커밋 메시지 입력됨


✅ 병합 후 푸시

git push origin main

🧠 merge vs rebase 정리

상황 추천
내 브랜치를 최신 main 위로 정렬 git fetch + git rebase origin/main
main에 다른 브랜치 변경 반영 git checkout main + git merge feature/xxx
협업 중 내 작업 정리 git rebase -i
병합 충돌 해결 git add + git rebase --continue 또는 git commit

📜 추가 팁: Merge 시 fast-forward 없이 병합

git merge --no-ff feature/login

병합 브랜치를 명확히 히스토리에 남기고 싶을 때 (팀 전략에 따라 다름)


댓글