git remote 에서 push/pull시 non-fast-forward 에러
문제
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에선 찾을 수 없으니 위와 같은 에러.
해결법
- 원격저장소 삭제 후 다시 만듦
- 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) 에러
Author And Source
이 문제에 관하여(git remote 에서 push/pull시 non-fast-forward 에러), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@adguy/git-remote-에서-pushpull시-non-fast-forward-에러저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)