티스토리 뷰

Merge conflict 

- 서로 다른 브랜치에서 같은 파일을 수정하고 그 브랜치들을 합칠 때(merge) 충돌이 일어나는 상황을 말합니다.

 

일부러 merge conflict 상황을 만들어봅시다. 

  • feature/stock 
  • feature/jjigae_rtan 
  • 두 개의 새로운 브랜치를 생성하고 둘은 같은 파일 jjigae.txt를 수정한 뒤, stock을 먼저 main에 merge (이 때는 충돌나지 않습니다.)
  • 그 다음 jjigae_rtan을 main으로 병합(merge)하려고 할 시 아래와 같은 충돌 병합 메세지가 뜬다. 

우측 하단에 GIt에서 자동으로 작성해준 파일내역입니다. jjigae.txt

  • 충돌 병합은 같은 파일을 수정했을 시 어떤 코드를 반영할 거냐고 묻는 것과 같다고 했습니다. 
  • HEAD의 경우 현재 브랜치(예시에서는 main)의 jjigae.txt가 가지고 있는 내용을 구분선 ====을 통해 알려주고 있다.
  • 아래는 feature/jjiage_rtan의 다른 jjigae.txt 내역을 보여주고 있다. 
  • 결론적으로 둘 중에서 어떤 내용을 jjiage.txt에 반영할 거냐고 묻는 것이다. 

여기서 merge conflict를 해결하는 방법은 둘 중에서 하나만 선택해서 jjigae.txt를 수정하고 새로 commit해주면 된다. 

  • <<<HEAD === >>>feature 이런 것들을 지워줘야 한다. 
  • 원한다면 두 코드를 모두 살려도 된다. 
주의할 점❗ 포인트는 충돌이 났다는 '화살표'들을 지워주는 것이다. 수정 내역은 중요하지 않다(새 내용 추가해도 괜찮단 소린 아님 기존의 코드들의 코드 배치만 상관없다는 것). 
단, 해당 코드에 없던 내용을 추가하게 되면 차후에 작업 내역에서 추적이 안된다. 새로운 내용을 추가하고 싶다면 우선 기존 내용을 사용하여 병합 충돌을 해결해준 다음에 새로운 커밋으로 만들어야 한다.

GIt이 만들어 놓은 화살표들을 지운 뒤, 코드를 선택하여 재배치했다면 commit시 sourcetree에서 commit 설명을 자동으로 생성해준다. 

 

 

+ 여담) 

스테이지에 올리지않은 jjigae.txt가 commit 버튼을 누르자마자 자동반영됐다.. 스테이지에 올리지않았는데 반영이 되니까 당황스럽고 어떻게 수정해야할지도 모르겠음.. 우선 개인프로젝트로 연습하고 있던 터라 어영부영 넘어갔지만 commit하기 전에 add하는 것을 꼭 기억하고 있자. 🤦‍♂️

 

+2022 08 16 추가)

commit 내역 revert 하면 된다. 쫄지 마셈!

댓글