[Git] PR Conflict 해결하기

Gaeun·2022년 12월 23일
0

wecode TIL

목록 보기
7/24
post-custom-banner

이번 주 express 과제는 git을 사용하며 진행하였다. 한번 잘못되면 큰 일이 생길까봐(실제로 큰 일이 생기기도 했고...🤯) 터미널을 만지작 거리는 게 너무나도 무섭지만 그래도 몇 번 해본 덕에 조금씩 알아가고 있는 중이다. 이번 과제를 하며 크고 작은 이슈들이 있었고, 대부분의 백엔드 동기들이 conflicts를 경험하였다. 물론 나도...😅😭 그래서 conflicts를 해결하는 방법에 대해 적어보고자 한다.

Conflit

브랜치와 브랜치의 병합 과정에서, 동일한 내용을 각자 다르게 변경한 이력이 있을 때 변경 이력들끼리 발생하는 충돌

  • 두 사람이 같은 파일의 같은 줄을 각자 다르게 수정했을 경우나, A 개발자가 B 개발자가 수정 중이던 파일을 삭제한 경우 컨플릭트가 발생할 수 있음
  • 이 경우 Git은 브랜치의 병합 과정에서 두 개의 수정 사항 중 어떤 것이 올바른 수정 사항인지 판단하지 못함.
  • 따라서 컨플릭트가 발생했다는 메시지와 함께 해당 파일에 컨플릭트가 발생한 부분에 표시를 해주며, 병합을 중단함.
  • 개발자는 표시된 파일을 확인해서 컨플릭트를 해결한 후 병합을 이어서 진행하는 방식으로 컨플릭트를 해결해야 함
  • 컨플릭트는 발생하면 안 되는 것이 아님. 오히려 Git을 사용한 작업 과정에서 흔히 겪을 수 있는 일상적인 것.
  • 다만, 컨플릭트가 발생 시 올바른 과정을 통해서 해결을 할 수 있어야 하며, 해결이 불가능할 정도의 대규모 컨플릭트가 발생하지 않도록 주의해야 함.

내가 경험한 Conflicts


(민주님 캡처 빌려 쓰기..!)

위 스크린샷의 Conflicts는 작업하던 브랜치(a)에서 그대로 다른 브랜치(b)를 생성하고 작업을 진행하고, a의 내용이 변경됨에 따라 b 브랜치에 충돌이 생길 수 있다는 안내 문구이다.

광휘님의 PR에 남겨주신 종범님의 코멘트에 따르면 "conflict는 무언가 잘못된 게 아닌 앞으로 개발을 하며 많이 접하게 될 자연스러운 현상이라고 생각하면 된다"고 하셨다. (하지만 다시는 접하고 싶지 않다.)

Conflict가 생겼을 때에는 아래와 같은 순서로 해결할 수 있다.

$ git add . 
$ git commit -m "commit message"
$ git checkout main # main 브랜치로 이동
$ git pull origin main # remote의 main에서 변경된 사항들을 local에도 가져와 최신화
$ git checkout branch_name # 이번 PR에 해당하는 브랜치로 이동
$ git merge main # main에 업데이트된 내용을 현재 내 브랜치로 통합

위의 명령어를 터미널에서 순차적으로 입력하면 충돌이 일어난 코드 블럭들을 VSCode에서 확인할 수 있다. 해당 부분들을 의도에 맞게, 즉 기능이 전부 올바르게 동작할 수 있도록 남겨둘 코드만 남기고, 바꿀 코드는 바꾸어 파일의 내용을 원하는 대로 수정한다. 이후

git add .
git commit -m "..."

하면 conflict가 해결된다! 👏👏👏🎉

이 문제를 맞닥뜨렸을 때에는 터미널 만지는 게 무섭고... 두렵고... 굉장히 무력하고... 공포스러웠고... 아주 부정적인 감정들은 다 몰려왔는데, 나 말고도 다른 동기분들도 모두 경험하는 것을 보고... ^^.... 동기들이 해결하는 모습을 보고 나니 이제는 같은 문제가 발생했을 때 아무렇지 않게 해결해낼 수 있을 것 같다! 하지만! conflict가 일어나지 않게 항상 main 브랜치에서 새 작업 브랜치 만드는 것을 습관화해야겠다!

profile
🌱 새싹 개발자의 고군분투 코딩 일기
post-custom-banner

0개의 댓글