! [rejected]
master -> master (non-fast-forward)
-> rejected
: push가 거부되었다. [ rejected = 거절]
-> master
-> master : 로컬 저장소의 master 브랜치의
변경사항을 원격 저장소의 master 브랜치에 반영하려 했는데
error
: failed to push some refs to 'github.com:Seop0728/test.git'
-> non-fast-forward : 원격 저장소의 master 브랜치가 로컬 저장소의
버전보다 이전 버전이 아니야" 그니까 안해줄꺼야
hint: Updates were rejected because the tip of your current branch is behind
-> 힌트: 현재 분기의 끝이 뒤쳐져 업데이트가 거부되었습니다.
hint: its remote counterpart. Integrate the remote changes (e.g.
-> 먼소리인지 모르겠음;;
hint: 'git pull ...') before pushing again.
-> push 하기전에 git pull 시도해보라
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
-> 자세한 내용은 고객센터에 문의해라
고객센터 ( git push --help )
-- fatal: refusing to merge unrelated histories
-> 원격 저장소의 master 브랜치에서 로컬 저장소의 FETCH_HEAD를 merge하는 것이 거부되었다.
commit 히스토리가 서로 관련이 없다.
즉, 서로 관련성이 없기 때문에 merge할 수 없다는 것이다. 띠용!
pull 명령어는 fetch + merge 작업을 한번에 처리하는 명령어이다.
현 상황은 fetch는 되었지만, merge가 되지 않은 상태이다.
기본적으로 merge는 원격 저장소와 로컬 저장소가
공통으로 가지고 있는 commit지점이 존재해야 한다.
그 지점부터 병합을 시도하기 때문이다.
애초에 공통되는 commit이 없기때문에 pull 명령어를
사용할 수 없는 것이다.
fetch는 원격 저장소에 있는 내용을 가져오지만
자동으로 내 로컬 저장소에 merge하지 않는다.
원격 저장소의 내용을 확인만 하고,
로컬에 merge하고 싶지 않을 때는 fetch를 사용한다.
HEAD에는 가장 마지막에 행해진 commit정보가 담긴다.
마찬가지로 FETCH_HEAD는 원격 저장소의
가장 최신 commit 이력이 담기게 된다.
FETCH_HEAD는 이름 없는 브랜치로 로컬에 가져오게 된다.
이 브랜치는 FETCH_HEAD로 checkout도 가능하다.
pull 명령어는 원격 저장소에 있는 내용을 가져올 뿐만 아니라,
자동으로 로컬 저장소에 merge한다.
즉, git pull 명령어는 git fetch + merge FETCH_HEAD인 셈이다.
복잡하고 긴 설명 끝에 결론은 어쨌든 연결되는 공통된
커밋 포인트가 없다는 것이다.
이 상황을 해결하기 위한 방법에도 2가지 방법이 존재하는데,
git clone 명령어를 통해 원격 저장소를 복제해온다.
pull 명령어에 옵션을 추가해 강제로 pull 한다.
복잡하고 긴 설명 끝에 결론은 어쨌든 연결되는 공통된 커밋 포인트가 없다는 것이다.
해결 방법
1번 - git clone 명령어를 통해 원격 저장소를 복제해온다.
git clone git@github.com:lainyzine/git-clone.git
2번 - pull 명령어에 옵션을 추가해 강제로 pull 한다.
git pull origin (branchname) --allow-unrelated-histories