git push 거부당했을 때 - fetch first error

정성헌·2026년 3월 28일
post-thumbnail

상황 설명

프로그래머스 풀이를 GitHub에 올리기 위해 VSCode로 README.md를 수정하고 터미널에서 push를 했더니 이런 에러가 떴다.

git push origin main

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

왜 이런 일이 생겼을까?

원인은 원격 저장소(GitHub)와 로컬 저장소의 커밋 히스토리가 달라졌기 때문이다.

[GitHub 원격]   A → B → C   (GitHub Actions가 README 자동 업데이트)
[로컬]          A → B → D   (내가 VSCode에서 README 수정)

나는 로컬에서 README를 수정하는 동안, GitHub Actions가 원격 저장소의 README를 자동으로 먼저 업데이트해버렸다.

그 결과 로컬과 원격의 히스토리가 달라져서 git이 "너 로컬에 없는 커밋이 원격에 있는데 그냥 덮어쓰면 안 됨!" 이라고 거부한 것이다.


해결 방법

✅ 올바른 해결법: pull 후 push

git pull origin main --no-rebase
git push origin main

--no-rebase 옵션은 원격의 변경사항을 merge 방식으로 가져온다.
충돌 없이 합쳐지면 바로 push까지 완료된다.


삽질 과정

❌ 시도 1: rebase

git pull origin main --rebase

README.md와 submit.sh 두 파일에서 충돌이 나서 실패.

❌ 시도 2: 강제 푸시

git push origin main --force

이번엔 토큰에 workflow 권한이 없다는 에러 발생.
.github/workflows/ 파일을 push하려면 GitHub Personal Access Token에 workflow 스코프가 필요하다.

✅ 최종 해결

git pull origin main --no-rebase
git push origin main

핵심 정리

상황해결법
원격에 내가 모르는 커밋이 생겼을 때git pull 먼저 하고 push
rebase 도중 충돌났을 때git rebase --abort 로 취소
workflow 파일 push 안 될 때GitHub 토큰에 workflow 스코프 추가

💡 push 전에 항상 pull 먼저 하는 습관을 들이자.
특히 GitHub Actions처럼 자동으로 커밋을 만드는 워크플로우가 있다면 더욱!


마무리

단순히 README 하나 수정하려다가 git 에러 3방을 맞았지만, 덕분에 아래 개념들을 확실히 이해했다.

  • 로컬과 원격의 히스토리가 달라지면 push가 거부된다
  • --rebase vs --no-rebase (merge) 의 차이
  • GitHub Actions가 자동 커밋을 만들 수 있다는 것
  • Personal Access Token의 스코프 개념

앞으로는 git pull 먼저, git push 나중에 하는걸로 기억하자!

profile
develop myself

0개의 댓글