프로젝트 이야기
[Git] rejected-not-fast-forward 에러 해결
아, 그래요?
2023. 8. 9. 04:03
커밋 후 깃헙 레파지토리에 올리려고 git push
를 실행하니 아래와 같은 오류가 발생하였습니다.
To https://github.com/ChoiJangSeop/tokyo-subway-database.git
! [rejected] main -> main (non-fast-forward)
[rejected] non-fast-forward 의 원인
이 오류는 원격 레파지토리와 로컬 레파지토리의 공통 사항이 없어서 발생하는 것이다.
나의 경우는 git push
수행 전에 git commit --amend
를 수행하였는데 이때 원격(origin/main)과 로컬(main) 사이의 충돌이 발생한듯 하다.
해결
결국 브랜치(branch)들 간의 충돌이 일어난 것이므로 두 브랜치를 병합(merge)하여 병합 충돌(merge conflict)을 해결하면 된다.
먼저 git fetch
실행 후, 병합을 실행한다.
git merge origin/main
✘ jangseop 💡 ~/Desktop/dev/tokyo-subway-database ⇅ main > git merge origin/main
자동 병합: src/main/java/com/jangseop/tokyosubwaydatabase/controller/ControllerAdvice.java
충돌 (추가/추가): src/main/java/com/jangseop/tokyosubwaydatabase/controller/ControllerAdvice.java에 병합 충돌
자동 병합: src/main/java/com/jangseop/tokyosubwaydatabase/controller/dto/ErrorResponse.java
충돌 (추가/추가): src/main/java/com/jangseop/tokyosubwaydatabase/controller/dto/ErrorResponse.java에 병합 충돌
자동 병합: src/main/java/com/jangseop/tokyosubwaydatabase/exception/duplicated/ObjectDuplicatedException.java
충돌 (추가/추가): src/main/java/com/jangseop/tokyosubwaydatabase/exception/duplicated/ObjectDuplicatedException.java에 병합 충돌
자동 병합: src/main/java/com/jangseop/tokyosubwaydatabase/exception/illegal_format/IllegalFormatException.java
충돌 (추가/추가): src/main/java/com/jangseop/tokyosubwaydatabase/exception/illegal_format/IllegalFormatException.java에 병합 충돌
자동 병합이 실패했습니다. 충돌을 바로잡고 결과물을 커밋하십시오.
위와 같이 병합 충돌이 일어나고, 수동으로 코드를 수정해 병합 충돌을 해결해주어야 한다.
코드 레벨에 가보면 아래와 같이 충돌하는 파트에 origin/main과 HEAD의 코드가 각각 나와 있다. 둘 중, 보통 HEAD를 남겨주고, origin/main은 제거한다.
```java
package com.jangseop.tokyosubwaydatabase.controller.dto;
<<<<<<< HEAD
public record ErrorResponse(String message, int status, Object errorField) {}
=======
public record ErrorResponse(String message, int status) {}
>>>>>>> origin/main
모두 해결 후 다시 커밋하고 푸쉬해주니 문제없이 push가 되었다.