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 main2
merge 로 합치기
rebase 가 부담되면 일반 pull(merge) 후 푸시합니다. merge 커밋이 생깁니다.
git pull origin main
git push origin main3
force-with-lease (의도적 히스토리 변경 시)
rebase/amend 로 히스토리를 의도적으로 바꿨다면 안전한 강제 푸시를 씁니다. 일반 --force 보다 안전합니다.
git push --force-with-lease origin main💡 예방: 작업 시작 전과 푸시 전에 git pull --rebase 를 습관화하세요. 자동 발행이 도는 저장소는 특히 충돌이 잦습니다.
gitpushnon-fast-forwardrebasepull