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에선 찾을 수 없으니 위와 같은 에러.
해결법
하지마 git pull origin master 시 에러.
git pull origin master
에러 내용은 원격 저장소 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) 에러