충돌 해결

Chooooo·2023년 12월 4일
0

인턴생활

목록 보기
13/19

서버의 버전을 pull 받아올 때 충돌

현재 깃랩에 올라가 있는 코드를 git pull을 받아올 때 충돌이 발생한다.

이번에 충돌을 인텔리제이 상에서 어떻게 해결하면 좋을지 작성해보려고 한다.

위 사진에서 3가지 버전의 코드가 보인다.

  1. 왼쪽 (Local changes) : 해당 왼쪽의 코드는 내가 로컬 브랜치에서 작업한 코드다. 즉 내 최신 커밋에서의 변경사항이다.

  2. 가운데 (Base Version) : 이것은 공통 조상, 즉 병합하려는 두 브랜치의 마지막 공통 커밋에서의 코드다. Git은 이 버전을 기준으로 변경사항을 비교하며, 충돌을 해결할 때 양쪽 브랜치의 변경사항을 여기서 통합하게 된다.

  3. 오른쪽 (Changes from server) : 오른쪽은 원격 저장소의 코드로, 보통 메인 브랜치 또는 병합하려고 하는 대상 브랜치의 최신 상태이다.

😎 병합 충돌 해결 시 나는 이 세 가지 버전의 차이를 이해한 후, 어떤 코드를 유지할지 결정하면 된다.

  • 때로는 한쪽의 변경사항만 선택하고, 때로는 두 변경사항을 적절히 통합해야 할 수도 있다.

😎 병합 충돌 해결 도구는 이러한 비교를 시각적으로 표시하여 해당 과정을 돕는다.

  • 나중에 툴을 써서 해결하자.

충돌을 일으킨 코드 확인

두 버전의 변경사항 중 어느 것을 유지할지 결정하거나, 필요한 경우 두 변경사항을 통합해야 한다.
위에서 예를 들어, category 필드의 데이터 타입이 충돌났는데, String []인지 Object인지 결정해야 한다.
또한, grade 필드가 한 버전에서는 String, 다른 버전에서는 int로 충돌이 일어나고 있다. 이 역시 내가 선택하면 된다.

아직 처리하지 않은 변경사항이 있지만
첫번째 Apply changes and Mark resolved를 클릭하면 현재까지의 변경사항을 저장하고 모든 충돌을 해결한 것으로 표시한다. 하지만 실제로는 처리되지 않은 변경사항들이 남아있기 때문에 이 옵션을 선택하면, 불완전한 병합 상태가 될 수 있다.

두번째 Continue Merge를 클릭하면 충돌 해결을 계속 진행할 수 있다.

  • 해당 옵션이 일반적으로 권장되는 옵션인데, 왜냐하면 모든 충돌을 신중하게 해결하고 모든 변경사항을 올바르게 반영한 후에 병합을 마쳐야 하기 때문.

  • 만약 충돌만 부분을 모두 해결하고 수정사항들을 자동으로 받아들이고 싶다면 충돌 해결 후 Apply Changes and Mark Resolved 버튼 클릭을 하면 된다.

해당 버튼은 현재까지의 변경사항을 저장하고 충돌을 해결한 것으로 표시한다. 그리고 병합 도구를 닫고 일반적인 커밋 흐름으로 돌아가게 해준다.

일반적인 해결

병합 충돌을 해결하는 일반적인 방법 중 하나는 빨간색으로 충돌난 부분만 해결 후에
그림의 빨간색 표시처럼 충돌이 나지 않은 부분은 모두 적용하는 것이다.
Apply non-confliting changes 기능은 충돌하지 않은 변경사항들을 자동으로 합치는 데 사용된다.

😎 사진에 표시된 Left AllRight All 버튼은 충돌하지 않는 변경사항들을 각각 현재 브랜치(Left)와 원격 브랜치(Right)에서 모두 수락하는 기능을 제공한다.

  1. 충돌 해결 : 충돌이 발생한 부분을 수동으로 해결
  2. 비충돌 변경사항 적용 : 충돌하지 않는 변경사항은 Left All 또는 Right All 버튼을 통해 자동 적용. 이러한 변경 사항은 충돌과 관련 없기 때문에 안전하게 처리된다.
  3. 변경사항 적용 및 커밋 준비 : 모든 충돌을 해결하고 비충돌 변경사항을 적용한 후, Apply 버튼을 클릭하여 변경사항을 최종적으로 적용
  4. 커밋 및 푸시 : 병합이 완료되었으면 커밋 & 푸시
profile
back-end, 지속 성장 가능한 개발자를 향하여

0개의 댓글