[Git] 원격 저장소 푸시 거부 문제 해결

2025. 2. 4. 07:11코딩 도구/개발 도구 & 환경 (Dev Tools & Environment)

반응형

Git 원격 저장소 푸시 거부 문제 해결기

개발을 하다 보면 Git을 사용하면서 원격 저장소에 코드를 푸시(push)할 때 문제가 발생할 수 있습니다. 이번 글에서는 제가 겪은 'Git push 거부' 문제와 그 원인, 그리고 해결 방법을 정리해보았습니다.


문제 상황

로컬에서 git init으로 새 프로젝트를 초기화하고, GitHub에 원격 저장소를 생성한 후 다음과 같이 커밋하고 푸시를 시도했습니다.

git remote add origin https://github.com/mk-isos/spring
git add .
git commit -m "Initial commit"
git push -u origin main

하지만 다음과 같은 에러 메시지가 발생했습니다:

! [rejected] main -> main (fetch first)
error: failed to push some refs to 'https://github.com/mk-isos/spring'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally.

원인

  • 원격 저장소에 README.md 파일이 이미 존재했으나, 로컬에는 해당 파일이 없었음
  • 로컬과 원격 저장소가 서로 다른 커밋 히스토리를 가지고 있어서 발생한 충돌

해결 방법

1. 원격 저장소의 변경사항 가져오기

먼저 원격 저장소의 변경사항을 로컬로 가져와야 했습니다. 로컬과 원격이 서로 다른 커밋 히스토리를 가지고 있으므로 --allow-unrelated-histories 옵션을 사용해야 했습니다.

git pull origin main --allow-unrelated-histories

이 명령어는 원격 저장소의 README.md를 로컬로 병합해주었습니다.

2. 병합 커밋 생성

만약 충돌(conflict)이 발생했다면 충돌 파일을 수정하고, 그렇지 않다면 병합 커밋을 진행했습니다.

git add .
git commit -m "Merge remote changes"

3. 변경사항 푸시

이후 정상적으로 원격 저장소에 코드를 푸시할 수 있었습니다.

git push -u origin main

결과:

Enumerating objects: 36, done.
Counting objects: 100% (36/36), done.
Delta compression using up to 8 threads
Compressing objects: 100% (25/25), done.
Writing objects: 100% (35/35), done.

결론

이번 경험을 통해 원격 저장소에 이미 존재하는 파일로 인해 푸시가 거부될 수 있다는 점을 배웠습니다. 앞으로는 다음 사항을 주의해야겠습니다:

  • 원격 저장소를 미리 초기화했는지 확인하기
  • git pull origin main --allow-unrelated-histories로 병합 처리하기
  • 필요시 git config를 활용해 기본 동작을 설정하기
반응형