header-img
Info :
  1. 문제.
  2. 방법 1.
  3. 방법 2.
  4. 방법 3.
728x90

문제.

 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to '주소지'

오류 발생.. 찾아보니

non-fast-forward 는 마스터브랜치가 local 저장소보다 이전 버전이 아니라는 의미라고 한다.

 

즉, 로컬에 git pull로 가지고 온 이후에 원격 저장소에서 한단계 더 commit이 이루어졌을 때, local에는 commit 로그가 없기 때문..

= 원격 저장소는 로컬 저장소보다 항상 이전 버전이어야 git push가 가능해진다고 한다.

 

push나 pull 명령은 로컬 저장소 commit 목록과 원격 commit 목록을 비교하여 원격저장소에 마지막 commit ID 와 로컬의 마지막 commit ID를 찾아내서 연결하는데.. 이 단계에서 원격저장소의 마지막 commit ID가 local에서는 찾을 수 없게 되니, 해당 에러가 발생하게 된다.

 

+

github 에 생성된 원격 저장소와 로컬에 생성된 저장소 간에 공통분모가 없는 상태에서 병합을 시도하면 발생하는 경우가 있다고 한다. 중간에 github 레포지토리 커밋 내용 정리를 한번 싸악 했는데... 아마 그것 때문에 일어난 문제가 아닐까 싶었다.

 

방법 1.

① 원격저장소 삭제 후 다시 생성.

② Fetch 나 Pull 명령어로 원격저장소의 마지막 Commit 을 로컬저장소의 Commit Log 맨앞으로 받아온다.

 

방법 2.

git pull orgin master --allow-unrelated-histories

git pull 시 --allow-unrelated-histories 옵션 추가해서 관련 없던 두 저장소를 병합하도록 허용하는 방법

git의 경우 서로 관련 기록이 없는 이질적인 두 프로젝트를 병합할 때 기본적으로 거부하는데, 이것을 허용해주는 행위.

 

방법 3.

git pull origin feature/ㅇㅇㅇ --force

Push /Pull Origin 뒤에 --force 를 붙혀주면, 과거 커밋 내역과 상관없이 지금 현재 커밋내용으로 덮어씌워 버리는 명령어.

 

 

 

728x90
더보기
IT 기술/기타