TechFeedTechFeed
Git설정

git push rejected non-fast-forward — 원격이 앞서 있어 푸시 거부

! [rejected] main -> main (non-fast-forward) / Updates were rejected because the remote contains work that you do not have locally
한 줄 해결: 원격에 내 로컬이 모르는 커밋이 있어 푸시가 거부된 것으로, 먼저 pull(rebase 권장)로 원격 변경을 합친 뒤 푸시합니다.

이런 증상일 때

git push 시 "[rejected] ... (non-fast-forward)"가 뜨고 푸시가 막힙니다. 다른 사람(또는 다른 기기·자동화)이 같은 브랜치에 먼저 푸시한 경우입니다.

원인

  • 마지막 pull 이후 원격 브랜치에 새 커밋이 추가됨
  • 협업자/자동 발행 봇이 같은 브랜치를 먼저 갱신
  • 히스토리를 강제로 바꾼 뒤(rebase/amend) 일반 push 시도

해결 방법

1
pull --rebase 후 push (권장)

원격 변경을 내 커밋 아래로 깔아 히스토리를 깔끔히 합칩니다.

git pull --rebase origin main
git push origin main
2
merge 로 합치기

rebase 가 부담되면 일반 pull(merge) 후 푸시합니다. merge 커밋이 생깁니다.

git pull origin main
git push origin main
3
force-with-lease (의도적 히스토리 변경 시)

rebase/amend 로 히스토리를 의도적으로 바꿨다면 안전한 강제 푸시를 씁니다. 일반 --force 보다 안전합니다.

git push --force-with-lease origin main
💡 예방: 작업 시작 전과 푸시 전에 git pull --rebase 를 습관화하세요. 자동 발행이 도는 저장소는 특히 충돌이 잦습니다.
gitpushnon-fast-forwardrebasepull

관련 에러

관련 가이드

Git 고급 워크플로우 — 실무에서 바로 쓰는 전략