Java

[Eclipse] Eclipse에서 Github Repository로 push할 때 reject 오류 해결법

haehyun 2021. 10. 11. 21:57
728x90

오류

이클립스에서 Github 원격저장소에 변경사항을 Push하려는데
아래와 같이 rejected 메시지가 표시되며 staged한 이력들은 안보이고, github에도 반영되지 않음.
master → master [rejected - non-fast-forward]

 

원인

원격 레포지토리(Git Repository = origin)의 내용과 현재 로컬 레포지토리의 내용이 일치하지 않아 Push를 수행할 수 없다는 뜻. Github Repository의 파일에 변경사항이 있을 때 발생하는 에러이며,

  1. Fetch로 원격 레포(Github)의 변경사항을 읽어오기 (Fetch From Upstream)
  2. Synchronize Workspace로 원격 레포-로컬 레포 변경사항 비교
  3. Pull로 원격 레포(Github)의 변경사항을 로컬에 불러오기
    ex) 타 팀원이 수정해서 Github에 올린 test.java 파일의 특정부분을 내 로컬에 덮어씌기
  4. Push로 로컬 레포의 변경사항을 원격 레포에 업로드
    ex) 내가 수정한 test.java 파일을 Github에 업로드

내 경우는 Github Repository의 README.md 파일에 오타가 있어서 이를 사이트에서 수정했었기 때문에 충돌이 발생했다. (오타 수정일 뿐이었지만 어쨌든 변경사항으로 취급=새로운 commit이 발생해 내 로컬 히스토리와 격차가 생긴 것)

 

해결법 A

//문제를 해결할 때 캡처를 깜빡해서.. 다음에 똑같은 상황이 발생하면 캡처 추가 예정 ㅠㅠ

1. [Team] > [Fetch From Upstream]

2. [Team] > [Synchronize Workspace]

3. Local File Workspace와 Remote Fime의 소스코드를 비교해 어느 하나로 통일시킨다.

  • Incomming Mode : 로컬 레포 ← 원격 레포, Pull 받아야 하는 파일만 표시
  • Outcoming Mode : 로컬 레포 → 원격 레포, Push 해야하는 파일만 표시
  • Incomming Mode/Outcomming Mode : 위 두 경우의 파일들을 일괄 표시
  • Conflicts Mode : 충돌이 발생한 파일만 표시

4. [Synchronize] 창의 상단바에서 [Pull] 클릭

5. [Synchronize] 창의 상단바에서 [Push] 클릭

 

 

해결법 B

1. [Windows] - [Show View] - [Other...] 클릭

 

2. 'Git Repositories' 선택 후 [Open]

 

3. 활성화된 [Git Repositories] 탭에서 [Repository명 > Remotes > origin] 선택, [Configures Fetch...] 클릭

 

4. [Advenced]

 

5. 기존에 존재하는 Ref mappings를 제거한 뒤, [Add Spec] 을 클릭해 새로 추가

 

6. [Finish] 클릭

 

7. [Save and Fetch]

 

8. 원격저장소의 변경사항을 확인 한 뒤 [Close] 클릭

 

9. Git Repository 탭에서 [Breanch > Local] 에서 Branch를 우클릭한 뒤, [Merge] 클릭

 

10. [Continue] 클릭

 

11. [Merge] 클릭

 

12. Project Explorer에서 프로젝트 우클릭 후 [Team > Remote > Push] 클릭

 

13. [Next] > [Next] 클릭

 

14. 로컬에서 push를 시도했으나 충돌로 인해 reject되어 push되지 못한 파일들이 표시된다. 확인 후 [Finish] 클릭

 

15. 이제 push 창에 reject가 표시되지 않는다. [Close] 클릭

 

16. Github Repository에 들어가보면 제대로 파일이 push된 것을 확인할 수 있다.


Fetch

위와 같은 에러를 막기위해서 소스코드를 작업하기 전에는 습관적으로 Fetch를 실행해 원격 저장소(Github Repository)의 변경사항을 로컬에 반영해주자.

프로젝트 우클릭 > [Team] > [Fetch from Upstream] 을 클릭하면, 원격 저장소의 변경사항이 화면에 표시된다.

 

Fetch를 했으면 원격 저장소의 변경사항이 [History]에 표시되어야 할텐데, 보이지 않을 경우
[History] 탭에서 [Show All Branches and Tags] 아이콘을 클릭하면 Fetch로 내려받은 내용도 함께 표시된다.

728x90