Git & CS

Git pull, push하려고하니 충돌 발생! 어떻게 해결할까?

승민아 2024. 9. 22. 16:28

브랜치를 나눠서 커밋을 나눠서한 이후에

추가적인 코드 작성후 main에 바로 Push하려고하니 문제가 발생했다...

 

문제 상황을 보자..

 

아래는 원격 저장소(Remote)의 커밋 상황이다.

커밋 "feat: 버킷리스트 상태 검색" 이후 2개의 커밋이 존재한다.

 

 

아래는 로컬 저장소(Local)의 커밋 상황이다.

내가 추가적인 코드 작성 후 커밋을 2개 더 한 상황이다.

커밋 "feat: 버킷리스트 상태 검색" 이후에 추가적인 코드 작성한 2개의 커밋이 존재한다.

 

 

원격 저장소와 로컬 저장소에 공통 커밋의 종점인

"feat: 버킷리스트 상태 검색"을 Base라고 하겠다.

 

즉,

원격 저장소에는 Base 이후에 2개의 커밋 A, B가 존재하는 상황이고

로컬 저장소에는 Base 이후에 A, B의 커밋이 없이 추가적인 커밋 C, D를 해버린 상황이다.

 

원격 저장소와 로컬 저장소의 커밋 트리가 차이가 있기 때문에

C, D가 로컬 저장소 push가 안되는 상황이다.

 

 

그래서 원격 저장소의 내용을 pull하려고 아래의 명령어를 실행했더니..

pull할때 merge를 할거냐 rebase를 할거냐 ff할거냐 묻는 메시지가 발생한다.

 

 

rebase는 이전의 커밋 내용들을 묶어 하나의 엔드 포인트로 만들때 사용한다.

하나의 포인트로 만들고 싶어서 rebase를 옵션으로 주었다.

Conflict가 발생한다. 이것을 어떤 코드를 사용할지 판단하여 해결해주어야한다.

 

 

 

Resolve

인텔리제이에서 Resolve를 눌러 충돌을 직접 해결할 수 있다.

 

 

충돌이 일어난 파일들을 알려주는데 이것을 클릭하여 충돌난 부분의 코드들을 이용해

원하는 코드를 하나로 만들어서 충돌을 해결해주어야한다.

 

 

위의 화면에서 하나하나 사용할 코드를 선택하여 하나의 코드로 만들어주면 된다.

 

충돌난 파일들을 모두 해결했다면 새로운 커밋을 만들어주면 된다.

나는 "feat: 상세 보기 페이지에서 페이지 이동"으로 커밋을 새로 했다.

 

새로운 하나의 엔드 포인트로 merge를 성공적으로했다!