Git Conflict 발생 해결책

Eeeasy-code·2023년 11월 7일
0

[git]

목록 보기
1/1
post-thumbnail
post-custom-banner

Conflict 시나리오

  1. 최근에 프로젝트를 진행하는 강의를 들으면서 수업 전 날, 미리 내 깃허브 레포에 수업에 필요한 코드를 push해놓고 프로젝트에서 사용하는 OS 내에서 내 레포를 pull해 코드를 사용했다.
    수업은 주에 한 번이라 전 주에 내가 로컬에 어떤 코드를 작성하고 수정했는지, 원격 레포에는 어떤 코드가 올라가 있는지 까먹게 되는데 아무 생각없이 pull을 시도하였다가 Conflict이 발생했다.

  2. 회사를 다니던 때에 개발 중인 서비스에 대한 계정 정보, Docker-compose 파일 등 내가 사용하기 편한 환경 설정을 로컬에 구성하여 개발을 진행했다. 하나의 feature에 대한 개발 작업이 완료되고 develop 브랜치와 merge를 하려 PR을 만들었는데, Conflict이 발생했다.

이 외에도 git을 사용하는 환경에서는 나를 당황시키는 conflict이 정말 많이 발생할 것이다. 위 시나리오는 실제 내가 겪었던 사례 기반이다.

해결 방안

그렇다면 우리는 conflict이 발생했을 때 어떤 식으로 해결을 해야할까?

conflict이 발생했을 때 해결 방법은 매우 단순하다.

  1. 진행된 merge 작업을 취소하고 원래 상태로 복귀
  2. conflict이 발생한 지점을 확인한 뒤, 해결하고 merge를 완료

1. 진행된 merge 취소

git merge --abort 를 실행하면 merge가 취소된다.

2. conflict 해결 후 merge

git status 를 실행해보면 현재 conflict가 발생한 파일의 이름이 출력된다. 그럼 conflict가 발생한 파일을 찾아가보자.

conflict가 발생한 지점이 보인다.

<<<<<<< HEAD 부터 ======= 사이의 내용은 나의 로컬 환경 수정 사항들을 나타낸다. 이 수정 사항은 아직 원격 저장소에 반영되지 않은 상태이다.

  • HEAD가 가리키던 (HEAD 표시가 있는 이유)
  • master 브랜치가 가리키던 최신 커밋에서의 파일 내용

======= 부터 >>>>>>> 사이에는 원격 저장소나 다른 브랜치의 수정 사항들을 나타낸다.

  • premium 브랜치가 가리키던 최신 커밋에서의 파일 내용

여기서 선택할 수 있는 옵션은 여러가지가 존재한다.

  1. Good morning을 사용할 것인가? (Good morning! 텍스트만 남겨놓고 나머지 부분 전부 삭제)
  2. Good Afternoon을 사용할 것인가? (Good Afternoon~ 텍스트만 남겨놓고 나머지 부분 전부 삭제)
  3. Good morning과 GoodAfternoon을 둘 다 사용할 것인가? (둘 다 남겨놓는다)
  4. 새로운 코드를 사용할 것인가? (충돌난 부분 전부 삭제 후 다시 새로운 코드 입력)

이후, commit을 날려주고 merge를 진행하면 된다.

profile
쉽고 즐겁게 개발합시다.
post-custom-banner

0개의 댓글