일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Android
- androidstudio
- bitmap
- BOJ
- Canvas
- CS
- Database
- DBeaver
- DP
- Ecilpse
- Eclipse
- firebase
- git
- github
- GooglePlayServices
- gradle
- IDE
- IntelliJ
- java
- json
- kotlin
- level2
- linux
- mariadb
- MYSQL
- Paint
- permission
- python
- Sorting
- sourcetree
will come true
[Eclipse] Eclipse에서 Github Repository로 push할 때 reject 오류 해결법 본문
오류
이클립스에서 Github 원격저장소에 변경사항을 Push하려는데
아래와 같이 rejected 메시지가 표시되며 staged한 이력들은 안보이고, github에도 반영되지 않음.
master → master [rejected - non-fast-forward]
원인
원격 레포지토리(Git Repository = origin)의 내용과 현재 로컬 레포지토리의 내용이 일치하지 않아 Push를 수행할 수 없다는 뜻. Github Repository의 파일에 변경사항이 있을 때 발생하는 에러이며,
- Fetch로 원격 레포(Github)의 변경사항을 읽어오기 (Fetch From Upstream)
- Synchronize Workspace로 원격 레포-로컬 레포 변경사항 비교
- Pull로 원격 레포(Github)의 변경사항을 로컬에 불러오기
ex) 타 팀원이 수정해서 Github에 올린 test.java 파일의 특정부분을 내 로컬에 덮어씌기 - 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로 내려받은 내용도 함께 표시된다.
'Java' 카테고리의 다른 글
[Eclipse] 이클립스 인터페이스 세팅하기 (Black 테마, Marketplace, 개발용 폰트 추천) (0) | 2021.10.18 |
---|---|
[Eclipse] Eclipse 프로젝트 파일 관련 .gitignore 설정하기 (0) | 2021.10.13 |
[Java] String클래스 메서드 replace()와 replaceAll() 차이점 (0) | 2021.10.07 |
[Eclipse] 이클립스에서 작성한 소스코드 Git Repository에 commit하기 - Clone (0) | 2021.10.05 |
이클립스(eclipse)에서 작업한 .java파일 cmd창에서 실행하기, 메인 메소드에 인자 전달하기 (0) | 2021.09.30 |