728x90
SMALL
📌 상황 요약
새 프로젝트 PulseBoard를 만들면서 다음과 같은 흐름으로 작업을 시작했다.
- Xcode에서 iOS 프로젝트 생성
- 해당 프로젝트를 Sourcetree에 등록
- GitHub에서 미리 생성해 둔 repository를
- Sourcetree의 Remotes 설정을 통해 연결
- 로컬에서 첫 커밋 생성
- Push 시도 → ❌ 에러 발생
처음 GitHub와 프로젝트를 연결할 때 자주 겪을 수 있는 문제였고,
결과적으로 Git의 보호 메커니즘을 이해하는 계기가 되었다.
❌ 발생한 에러
! [rejected] main -> main (non-fast-forward)
error: failed to push some refs
hint: Updates were rejected because the tip of your current branch is behind
이 에러의 의미
원격(main 브랜치)에 내가 아직 가져오지 않은 커밋이 이미 존재한다
즉,
- GitHub repo에는 이미 커밋이 있음 (README, 초기 설정 등)
- 로컬 main 브랜치는 그 커밋을 모른 채 push를 시도
- Git이 “이거 덮어쓰면 위험한데?” 하고 막은 상황
🔍 1차 오해: origin 문제
에러 해결을 위해 다음을 실행했다.
git pull origin main
실제 설정은 다음과 같았다.
Remote git@github.com:89Explorer/PulseBoard.git
✅ 해결 1단계: 올바른 remote로 pull
git pull Remote main
이제 remote 자체는 정상 인식되었지만,
다음과 같은 메시지가 다시 등장했다.
❌ 두 번째 에러: divergent branches
hint: You have divergent branches and need to specify how to reconcile them.
fatal: Need to specify how to reconcile divergent branches.
이게 무슨 뜻이냐면
로컬과 원격이 서로 다른 커밋을 가진 채 갈라진 상태라는 뜻이다.
Remote/main: A --- B --- C
Local/main: A --- B --- D
- C : GitHub에만 있는 커밋
- D : 로컬에서 만든 커밋
Git은 이 상황에서 자동으로 판단하지 않고,
개발자에게 “어떻게 합칠지”를 직접 선택하라고 요구한다.
🧠 Git이 제안한 선택지
1️⃣ merge
- 히스토리를 모두 남김
- 협업에서 안전
- 커밋 그래프가 다소 복잡
2️⃣ rebase
- 내 커밋을 최신 커밋 위로 재정렬
- 히스토리가 깔끔
- 개인 프로젝트 / 포트폴리오에 적합
3️⃣ fast-forward only
- 이미 분기되었으므로 불가능
✅ 최종 해결: rebase 방식 선택
PulseBoard는 개인 프로젝트 + 포트폴리오 목적이므로
히스토리가 깔끔한 rebase 방식을 선택했다.
git pull --rebase Remote main
이 명령의 의미는:
“원격(main)의 최신 커밋을 먼저 가져오고,
그 위에 내 로컬 커밋을 다시 얹어라”
문제없이 완료된 후:
git push
🎉 정상적으로 GitHub에 반영되었다.
📌 핵심 원인 정리
이번 문제의 핵심은 단 하나였다.
GitHub repository에 이미 커밋이 존재했는데,
로컬에서 그 사실을 모른 채 push를 시도했다
Git은 이를 막기 위해:
- non-fast-forward push를 거부했고
- merge / rebase 중 하나를 선택하라고 요구했다
이는 에러가 아니라 Git의 안전장치다.
✨ 배운 점
- Sourcetree에서 remote 이름은 반드시 확인할 것 (origin이 아닐 수도 있음)
- 첫 push 전에 git pull 습관화
- divergent branches 메시지는 “위험”이 아니라 “선택 요구”
- 개인 프로젝트에서는 rebase가 히스토리 관리에 유리
728x90
LIST
'PulseBoard' 카테고리의 다른 글
| Firebase Google 로그인 튜토리얼을 “실서비스 아키텍처”로 리팩토링하기 (iOS) (0) | 2025.12.23 |
|---|---|
| 🤔 Firebase Apple 로그인 튜토리얼 코드 → 우리가 만든 구조 (1) | 2025.12.22 |
| UIKit + Firebase Apple 로그인, MVVM & Coordinator로 설계하기 (0) | 2025.12.22 |
| 🤔 Firebase - Apple Login 하기 (Firebase Authentication, Apple Developer 설정) (0) | 2025.12.22 |
| Firebase Email/Password 인증을 사용하지 않은 이유— SNS 로그인만 채택한 서비스 설계 판단 기록 (0) | 2025.12.19 |