error: failed to push some refs to 해결/주의사항

[발생한 에러] 

! [rejected]          master -> master (non-fast-forward)
error: failed to push some refs to 'https://github.com/Xharpen/Lightning.git'
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.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

위 오류는 간단히 말하면 원격 저장소와 로컬 저장소의 상태가 달라서 충돌이 일어난 것입니다. (push reject)

git push 진행 시 데이터 유실 등 문제가 발생할 부분이 존재한다면
git에서 push로 파일을 올리지 못하게 막아 발생한 에러입니다.

[해결] 

1. 원격 저장소에 있는 변경사항을 pull로 내려받습니다.
2. 로컬 저장소에 있는 파일과 merge 하는 작업을 진행합니다.
3. merge 한 내용을 다시 push로 올려줍니다.

pull 를 사용해 받은 새로운 변경사항은 기본적으로 git이 자동 병합(auto merge) 작업을 진행해줍니다.
하지만 충돌 나는 부분이 있다면 수동으로 병합 작업을 진행해줘야 합니다.


[주의 - 강제 push 를 사용한 경우]

강제 push 명령어  
git push -u origin +master 

위 명령어를 사용해 원격 저장소에 강제적으로 push를 진행합니다.
그리고 새로운 문제를 직면하게 되었다.

원격 저장소에  강제 push 한 파일만 남고 모든 작업이 다 날아가 버렸다.
 

[날려버린 git 복원하기]

정말 다행히 개발 서버에 강제 push 작업이 적용되지 않은 로컬 저장소가 있었습니다.
해당 로컬 저장소를 사용해 날려버린 git 내용을 복원할 수 있었습니다.

git reflog로 이전에 진행된 기록을 찾아봅니다.

git reflog 가 실행되면 저장소 tree에 일반적으로 보이지 않는 모든 commit을 살펴볼 수 있습니다.
여기서 되돌릴 위치의 commit을 찾은 후 해당 commit id를 기억합니다.

기억한 commit id를 사용해 리셋 명령어를 실행합니다.
git reset --hard {commit id}

리셋 명령어를 사용한 후 초기화된 내용을 원격 저장소에 반영해줍니다.
git push -f local-branch:remote-branch

 


[참고 사이트]

https://aonee.tistory.com/14
https://suwoni-codelab.com/git/2018/04/07/Git-reflog/
https://m.blog.naver.com/PostView.nhn?blogId=mjei78&logNo=153894060&proxyReferer=https:%2F%2Fwww.google.com%2F

  • share