TIL 61 | [Git & Github (에러)] ! [rejected] main -> main (fetch first) 해결 방법

Yoonsik·2023년 2월 27일
1

Git & Github

목록 보기
6/7

이번 포스팅에서는 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를 하려고 했던 것이다.

해결 방법 🛠

해당 에러의 해결방법은 두 가지가 있다.

  • 원격저장소와 연결되어 있는 현재 작업중인 로컬 저장소의 동기화를 위한 pull

    git pull --rebase origin main
    이때, `origin`자리에는 본인이 지정한 원격저장소 이름, `main`자리에는 본인이 지정한 브랜치 이름을 기입한다.

  • 강제로 push

    git push origin +main
    이때도 마찬가지로, `origin`자리에는 본인이 지정한 원격저장소 이름, `main`자리에는 본인이 지정한 브랜치 이름을 기입한다.

    이 경우에는 pull(동기화) 되지 않은 변경사항은 소실되기 때문에 주의해야 한다.
    본인은 README.md 파일을 수정한 내용이 그렇게 중요한 내용이 아니라서 강제로 push 하는 방법을 사용했다.

두 번째 방법 사용 후 github에서 확인해 보니, 이전에 github 웹 상에서 수정했던 README.md파일의 변경사항은 사라졌고, 다음 작업하여 강제로 push한 내용은 정상적으로 업로드 된 것을 확인할 수 있었다.


📌 reference

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

profile
꾸준함의 힘

0개의 댓글