To github.com:
! [rejected] master -> master (non-fast-forward)
error: 레퍼런스를 'git@github.com:'에 푸시하는데 실패했습니다
힌트: 현재 브랜치의 끝이 리모트 브랜치보다 뒤에 있으므로 업데이트가
힌트: 거부되었습니다. 푸시하기 전에 ('git pull ...' 등 명령으로) 리모트
힌트: 변경 사항을 포함하십시오.
힌트: 자세한 정보는 'git push --help'의 "Note about fast-forwards' 부분을
힌트: 참고하십시오.
깃헙에 생성된 원격 저장소와 로컬에 생성된 저장소 간 공통분모가 없는 상태에서 병합하려는 시도로 인해 발생.
기본적으로 관련 없는 두 저장소를 병합하는 것은 안되도록 설정되어 있다.
git push를 하고 깃허브 repository에 거슬리는 커밋내용을 삭제하려고 했는데 커밋내용이아니라 파일을 삭제 해버렸다. 깃허브 repository에는 파일이 삭제됐지만 기존에 남아있는(Pull Request)파일에는 해당 파일이 남아있어서 충돌이 되는게 원인이 된거같다.
git pull 시에 –allow-unrelated-histories 옵션 추가하여 관련 없었던 두 저장소를 병합하도록 허용
git pull origin master --allow-unrelated-histories
git에서는 서로 관련 기록이 없는 이질적인 두 프로젝트를 병합할 때 기본적으로 거부하는데, 이것을 허용해 주는 것이다.
하지만 단방향(Pull Request)이기 때문에 나는 브랜치에 pull할 권한이 없기 때문에 실패했다.
Git Repository에서 과거 Commit내역 삭제하기
어차피 과거 커밋했던 것들을 다 날려버려도 상관 없다면, 내 레파지토리에 들어가서 원인이있는 브랜치로 올렸던 과거 커밋 내역을 삭제하는 것이 가장 맘편한 방법일 것이다.
git reset HEAD^
를 통해
최근 마지막 커밋 내역 한 개를 삭제할 수 있다. HEAD 끝에 "~n"를 붙이면 최근 n개의 커밋 내역을 삭제한다.
하지만 이방법도 정확한 이유는 모르겠지만 잘되지는 않았다.
Git push origin feature/OOO -- force
Push origin 뒤에 -- force 를 붙여주면, 과거 커밋 내역과 상관없이 지금 현재 커밋내용으로 덮어씌워 버리는 명령어이다.
두번째 방법과 병행해서 문제가 있는 커밋내역을 삭제(git reset HEAD^)
하고
Git push origin feature/OOO -- force
을 넣어줘서 정상적으로 push가 되었다.
감사합니다. 덕분에 오류 무사히 수정했습니다!