✅ 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
해결 순서
- 충돌난 파일 열고 수동으로 수정
- 수정 완료 후:
git add src/App.java # 충돌 해결한 파일 스테이징
git rebase --continue # 다음 커밋 적용 진행
- 다시 충돌나면 위 과정 반복
- 끝나면 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
해결:
- 충돌난 파일 수정
- 수정한 파일 add
git add src/App.java
- 병합 완료:
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
병합 브랜치를 명확히 히스토리에 남기고 싶을 때 (팀 전략에 따라 다름)
'Git' 카테고리의 다른 글
[Git] 협업을 위한 Git 커밋 메시지 작성 가이드 (0) | 2025.04.24 |
---|---|
[Git] Git 명령어: 작업 상태 확인, 브랜치/커밋 이력, push 여부 확인 (0) | 2025.04.24 |
[Git] GitHub HTTPS 인증 실패: "Support for password authentication was removed" 에러 해결 가이드 (0) | 2025.04.16 |
[Git] Git의 전체 작동 흐름과 주요 명령어 설명 (0) | 2025.04.10 |
[Git] Git에서 강제로 Pull 하기 (`로컬 변경사항 무시하고 원격 상태로 덮어쓰기`) (0) | 2025.04.10 |
댓글