프로젝트 이야기

[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가 되었다.

 

드디어 푸쉬가 되었다...