상세 컨텐츠

본문 제목

git push 에러

Git

by H_Develop 2023. 6. 25. 01:03

본문

https://jobc.tistory.com/177

 

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

원격 저장소를 remote로 설정하고 바로 push를 하면 몇가지 오류가 발생할 수도 있다.예를 들어 아래와 같은 오류 메시지이다.12 ! [rejected] master -> master (non-fast-forward)error: failed to push some refs to 'https:

jobc.tistory.com

 

집과 사무실에 같은 저장소를 연결하고 사무실에서 이것저것 해보고 집에서 이것저것 해보고 push 하려는데 오류가 났다. 

 

git push origin main
info: please complete authentication in your browser...
 ! [rejected]        main -> main (non-fast-forward)
error: failed to push some refs to 'https://github.com/BigHwangTaeYeon/thymeleaf.git'
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

rejected : push가 거부되었다.

main -> main : 로컬 저장소의 main 브랜치의 변경 사항을 원격 저장소의 main 브랜치에 반영하려 했는데

non-fast-forward : 원격 저장소의 main 브랜치가 로컬 저장소의 버전보다 이전 버전이 아니다. 라는 의미이다.

 

두가지 추측이 된다. 

사무실에서 README.md 파일을 장난 쳤고, branch 연습을 main branch로 마무리 지었는데, 

집에서도 main branch로 commit 하고 push 했던 것 이다.

 

결과적으로는 pull을 했음에도 문제가 생겼던 것인데,

pull을 했음에도 README.md 파일을 가져오지 못했던 것 같다.

 

사무실에서 올린 readme.md이 집 로컬 저장소의 커밋 로그에는 없기 때문이다.

 

해결하기 위해서 fetch와  pull의 개념 정리가 필요하다.

 

fetch는 원격 저장소에 있는 내용을 가져오지만 자동으로 내 로컬 저장소에 merge하지 않는다.

원격 저장소의 내용을 확인만 하고 로컬에 merge하고 싶지 않을 때는 fetch를 사용한다.

HEAD에는 가장 마지막에 행해진 commit정보가 담긴다.

마찬가지로 FETCH_HEAD는 원격 저장소의 가장 최신 commit 이력이 담기게 된다.

pull 명령어는 원격 저장소에 있는 내용을 가져올 뿐만 아니라, 자동으로 로컬 저장소에 merge한다.

즉, git pull 명령어는 git fetch + merge FETCH_HEAD인 셈이다.

 

결과적으로 문제는 연결되는 공통된 커밋 포인트가 없다는 것이다.

git log --oneline --graph
*   2ab894b (HEAD -> main, origin/main) Merge branch 'main' of https://github.com/BigHwangTaeYeon/thymeleaf
|\
| *   7a83ff7 Merge branch 'testing'
| |\
| | * 5623a20 test merge conflict
| * | 84dda3c merge test
| * | 4b5eb57 Merge branch 'testing'
| |\|
| | * 8608571 branch testing, made a change
| * | 2b992d8 main branch, test
| |/
* | 576c143 README db 정보
* | 3221c50 230624 READE
|/
*   803e336 Merge branch 'main' of https://github.com/BigHwangTaeYeon/thymeleaf

해결한 그래프이긴 하다.

기억을 더듬어보면, README db 정보 이전이 사무실이고, 이후가 집이다.

 

  1. git clone 명령어를 통해 원격 저장소를 복제해온다.
  2. pull 명령어에 옵션을 추가해 강제로 pull 한다.

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

이렇게 pull  한 뒤에, push 하면 된다.

물론 할 때, README를 변경한게 있어서 conflict 나고 수정해서 commit 한 뒤 push 하긴 했다. 

관련글 더보기