git remote 에서 push/pull시 non-fast-forward 에러

낭만개발자·2021년 8월 28일
0

git

목록 보기
1/3
post-thumbnail

문제

remote 로 원격 설정하고 push할 때 에러 생길수 있음.

아래와 같이.

 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'https://github.com/huusz/test.git'

push 거부. local master에서 원격 master 브랜치로 반영하려했는데,
non-fast-forward : 마스터브랜치가 local 저장소 보다 이전 버전이 아니라는 뜻!

해결

즉 로컬에 git pull로 파일을 갖고 온 이후 원격 저장소에서 한단계 더 commit이 이루어졌을때, local엔 그 commit로그가 없기 때문. 즉 원격 저장소는 local저장소보다 항상 이전버전이어야, git push가 가능해진다.(생각해보면 논리적으로 옳음)

push 명령은 로컬 저장소 commit 목록과 원격 commit 목록을 비교.

그 후 원격저장소에 마지막 commit id와 로컬의 마지막 commit id를 찾아내 연결. 여기서 원격에서 마지막 commit id가 local에선 찾을 수 없으니 위와 같은 에러.

해결법

  1. 원격저장소 삭제 후 다시 만듦
  2. fetch나 pull명령어로 원격저장소의 마지막 commit 을 로컬저장소의 commit로그 맨앞으로 받아옴.

하지마 git pull origin master 시 에러.

git pull origin master

  • - fatal: refusing to merge unrelated histories

에러 내용은 원격 저장소 master 브랜치에서 로컬 저장소 FETCH_HEAD 를 merge 하는게 거부.
commit history가 관련 없어서 merge가 불가능 하다는 것.

pull은 fetch + merge 작업. 현 상황은 fetch 됨. merge 안됨.
기본적으로 merge는 원격 저장소와 로컬 저장소가 공통 commit 지점이 존재해야 함. 그 지점 부터 merge 하기 때문.

pull 명령어에 옵션 추가해 강제로 pull 가능

두번째 방법을 택해 pull 명령어에 옵션을 줘서 가져오면 간단하게 해결된다.

git pull origin (branchname) --allow-unrelated-histories

git push, pull (fatal: refusing to merge unrelated histories) 에러

profile
낭만닥터와 슬의를 보고 저런 개발자가 되어야 겠다고 꿈꿔봅니다.

0개의 댓글