여태까지 작업한 내용을 소스트리를 이용해 깃허브에 업로드해보았다
Add 를 통해 이클립스로 작업중인 프로젝트(의 로컬 경로)를 가져와서 소스트리와 프로젝트를 연동했으나
Push도, Pull도 되지 않음
Fetch만 되고 있음
원인을 찾아보니 원격저장소에 README 파일을 생성해두어서 인듯 하다
에러메시지 내용
: 원격저장소의 master 브랜치에서 로컬저장소의 FETCH_HEAD를 merge하는 것이 거부되었다
commit 히스토리가 서로 관련이 없다 = 서로 관련성이 없기 때문에 merge할 수 없다는 것
merge가 안되는 이유
merge는 원격저장소와 로컬저장소가 공통으로 가지고 있는 commit 지점이 존재해야 함
그런데 공통으로 가지고 있는 commit 지점이 존재하지 않기 때문에 merge 자체가 되지 않는것
fetch는 되는 이유
fetch는 원격 저장소에 있는 내용을 가져오지만 자동으로 로컬저장소에 merge하지는 않음
원격저장소의 내용을 확인만 하고 로컬에 merge하고 싶지 않을 때는 fetch를 이용함
fetch 를 실행하면 원격 저장소의 최신 이력을 확인할 수 있음
이때 가져온 최신 커밋 이력은 이름없는 브랜치(FETCH_HEAD)로 로컬에 가져오게 됨
여기서 HEAD는 가장 마지막에 행해진 commit정보가 담김
FETCH_HEAD
FETCH_HEAD는 이름없는 브랜치로, 원격저장소에 있는 커밋을 로컬로 가져오게 됨
이 브랜치로 체크아웃도 가능함
Pull 명령어
pull = fetch + merge
즉, pull 명령어는 원격 저장소에 있는 내용을 가져와서 + 자동으로 로컬 저장소에 merge함
git fetch + merge RETCH_HEAD 인 셈
=>
해결 방법
- git clone 명령어를 통해 원격저장소를 복제해옴
- pull 명령어에 옵션을 추가해 강제로 pull함
두번째 방법을 사용하였다.
git pull origin (branchname) --allow-unrelated-histories
git pull origin main --allow-unrelated-histories 로 readme를 local에 가져온 후 merge 시키고,
다시 push를 해보니 에러없이 push 성공하였다
github 레파지토리에서 프로젝트가 업로드된 것을 확인하였다
출처