이번 포스팅에서는 git push를 하던 중 발생한
! [rejected] main -> main (fetch first)
에러 해결 방법을 다뤄 볼 것이다.
goorm IDE에서 작업을 마친 뒤, 원격 저장소로 git push
명령을 실행 하였는데 ! [rejected] main -> main (fetch first)
에러가 발생하며 제대로 push가 되지 않았다.
해당 에러를 해결하기 위해 현재 연결되어 있는 원격저장소랑 현재 브랜치를 확인해 보았는데,
처음에 git push -u origin main
명령어를 통해 git push
로 push 할 때마다 연동되도록 지정한 원격저장소 이름(origin)과 브랜치(main)가 유지되어 있는 것을 확인하였다.
때문에, 그 밖에 문제가 없다면 git push
명령으로 문제없이 원격 저장소에 push가 되어야 하는데 자꾸
! [rejected] main -> main (fetch first)
에러가 뜨면서 원격저장소에 push가 되지 않았다.
! [rejected] main -> main (fetch first)에러는 원격저장소와 연결되어 있는 현재 작업중인 로컬 저장소가 동기화 되어있지 않을 때 발생하는 에러이다.
즉, 내 로컬 저장소가 가지고 있는 데이터와 원격 저장소의 데이터(서로 가지고 있는 최신 정보)가 서로 일치되어 있어야 하는데 지금 상황에는 그렇지 않기 때문에 해당 에러가 발생하는 것이다.
나의 경우, 이전에 github 웹 상에서 README.md 파일을 수정했었는데, 이 수정 내용을 다시 로컬(goorm IDE)에 pull 하지 않고 goorm IDE 에서의 다른 작업 내용을 바로 push하려고 해서 해당 오류가 발생하였다.
즉, git hub 웹 상에서의 README.md 파일의 수정사항을 로컬(goorm IDE)에서 pull 하여 동기화를 해 준 상태에서 다음 작업 내용을 push 해야 하는데, 나는 원격저장소와 연결되어 있는 현재 작업중인 로컬 저장소가 동기화 되어있지 않은 상태에서 자꾸 git push
를 하려고 했던 것이다.
해당 에러의 해결방법은 두 가지가 있다.
git pull --rebase origin main
이때, `origin`자리에는 본인이 지정한 원격저장소 이름, `main`자리에는 본인이 지정한 브랜치 이름을 기입한다.
git push origin +main
이때도 마찬가지로, `origin`자리에는 본인이 지정한 원격저장소 이름, `main`자리에는 본인이 지정한 브랜치 이름을 기입한다.
이 경우에는 pull(동기화) 되지 않은 변경사항은 소실되기 때문에 주의해야 한다.
본인은 README.md 파일을 수정한 내용이 그렇게 중요한 내용이 아니라서 강제로 push 하는 방법을 사용했다.
두 번째 방법 사용 후 github에서 확인해 보니, 이전에 github 웹 상에서 수정했던 README.md파일의 변경사항은 사라졌고, 다음 작업하여 강제로 push한 내용은 정상적으로 업로드 된 것을 확인할 수 있었다.
https://byul91oh.tistory.com/231
https://docs.github.com/ko/pull-requests/collaborating-with-pull-requests/addressing-merge-conflicts/resolving-a-merge-conflict-using-the-command-line