다른 글
[Git, Android Studio] 안드로이드 스튜디오에서 깃허브 연동
Push Rejected, Git Pull Failed
안드로이드 스튜디오와 깃허브를 연동 후 Add, Commit, Push 과정을 수행했다.
그 중 Push과정에서 ‘Push Rejected’ 오류가 발생했다. Push Rejected 오류는 Pull을 통해 해결했으나 Pull 과정에서 ‘Git Pull Failed’ 오류가 발생했다.
본 글은 Push Rejected, Git Pull Failed 오류의 해결과정을 설명하는 글이며, 안드로이드 스튜디오와 깃허브 연동 과정 중 발생한 문제이긴 하지만 안드로이드 스튜디오와 상관없이 Git의 Push, Pull 과정 중 발생하는 문제다.
오류 내용
Push Rejected : Push to origin/master was rejected
안드로이드 스튜디오와 깃허브를 연동 후 Push했으나 ‘Push Rejected : Push to origin/master was rejected’의 오류를 얻었다. Push가 Reject된 구체적인 원인이 명시되어있지 않아서 해결이 오래걸릴 줄 알았는데, ‘Push Rejected’를 구글에 검색했을 때 가장 많이 나오는 ‘non-fast-foward’ 키워드로 해결할 수 있었다.
원인은 Repository에 있던 ‘README’ 파일이었는데, 로컬에는 이 파일이 없었기 때문에 Pull 과정 없이 곧바로 Push를 하게 되면 Repository의 파일 정보(커밋 기록)와 로컬 파일 정보가 달라져 Merge과정에서 파일정보 유실의 가능성이 생긴다. 그렇기에 깃이 Push를 거절하는것이다.
정리하자면, 위 오류의 해결방법은 Pull(or fetch+merge)을 수행하는 것이다.
다른 방법으로는 Repository의 README 파일을 제거하거나 오류를 무시하고 강제로 Push하는 방법이 있다.
Git Pull Failed : origin/master refusing to merge unrelated histories
> FETCH_HEAD * [new branch] master -> origin/master refusing to merge unrelated histories
Push Rejected 오류를 해결하기 위해 Pull을 수행했으나 위와 같은 오류를 얻었다.
위 오류는 Push 과정에서 발생한 오류와 마찬가지로 Repository 파일 정보와 로컬 파일 정보가 상이하게 달라서 깃이 Merge를 거부하는 것이다.
해결법으로는 Repository 파일 정보와 로컬 파일 정보가 달라도 Pull이 가능하도록 허용해주는것이다.
아래 명령어를 git에서 실행하거나 안드로이드 스튜디오의 터미널을 이용해서 실행한다.
git pull origin master –allow-unrelated-histories
위 명령어 실행 후 Pull을 수행하면 정상적으로 작동됨을 확인할 수 있다.
참고
https://help.github.com/en/github/using-git/dealing-with-non-fast-forward-errors
https://www.educative.io/edpresso/the-fatal-refusing-to-merge-unrelated-histories-git-error
https://github.com/git/git/blob/master/Documentation/RelNotes/2.9.0.txt#L58-L68