[문제 해결] git branch merge 문제 발생

youngseo·2022년 4월 1일
0

ERROR

목록 보기
5/17

git branch merge 문제 발생

Intro

git branch에 대해 강의를 들은 후 작은 과제가 하나 주어졌다. 과제의 내용은 아래와 같다. (혹여나 저작권 문제가 생길까 약간의 변형을 했습니다.🤲)

practice

  • ironman.md를 생성하고 다음의 정보를 배역을 맡은 배우별로 브랜치를 생성하여 이를 시각화 하세요.
  • 완결된 브랜치는 master 브랜치로 merge 해야 합니다.
  • 각 commit은 개봉연도 순서대로 존재해야 합니다.
  • Format
  # {Movie Name}
  - Year:
  - Name:
  • Robert John Downey branch
  # Iron Man1
  - Year: 2008
  - Name: Tony stark
  # Iron Man2
  - Year: 2010
  - Name: Tony stark
  ...
  • Jon Favreau. Jon Favreau branch
  # Iron Man1
  - Year: 2008
  - Name: Tony stark

위과 같이 각각 출현진의 브랜치를 생성해 개봉연도 순으로 merge를 하면 되는 문제이었다.

함께 진행한 다른 팀원들의 완성 브랜치는 위와 같이 이쁘게 그려졌는데, 완성된 내 브랜치는 일자형으로 아주 평화롭게 그려지고, 내용이 삭제되는 등 이쁜 모양을 벗어났다🤣.

뭐가 문제일까 이렇게도 시도해보고 저렇게도 시도해보다, branch의 목적과 의미마저 잃어버리고 새로 레포를 clone하고 만들고의 무한 루프에 빠져버렸다.😭

문제 발생 이유

1. ⭐문제 의도 파악 실패

강사님께서 위와 같은 문제를 내주신 이유는 merge병합 과정에서의 충돌을 경험해보고 이를 해결해보는 의도이었다.

2. 텍스트 복사 붙여넣기

나는 과제를 받은 후 과제 pdf파일에서 copyfish를 이용해 텍스트를 복사해 한쪽에 정리를 해두고 복사 붙여넣기 하는 식으로 각각의 브랜치에서의 ironman.md를 수정을 진행했다.

main 브랜치
: main브랜치에 ironman.md파일 생성 후 Format 텍스트 작성 => git add => git commit

/* mian 브랜치의 ironman.md 파일 */
  # {Movie Name}
  - Year:
  - Name:

A 브랜치
: A브랜치 생성(git branch A)을 한 후 A브랜치의 ironma.md파일의 내용을 확인해보면, main브랜치에서 작성한 내용이 그대로 들어가 있는 것을 확인할 수 있다. 여기서 문제가 발생했다.

//기존 내용 삭제 후 아래 내용 붙여넣기
  # Iron Man1
  - Year: 2008
  - Name: Tony stark
  # Iron Man2
  - Year: 2010
  - Name: Tony stark
  ...

수정 모드에 진입한 후 기존에 있던 내용을 지워버리고, 복사 해놓은 텍스트를 그대로 가져다 붙여넣은 것이다.😭

merge 충돌 발생이 일어나는 이유

  • 각각의 브랜치에서 동일한 파일을 수정 후 merge를 하려고 할 때 충돌이 일어나는 이유는 동일한 부분에서의 수정이 발생했기 때문에 git이 어떤 내용이 맞는지 파악할 수 없어 그 판단의 결정권을 사용자에게 돌리는 것이다.

아예 내용을 삭제하고 merge를 시키니 A브랜치의 내용이 main 브랜치의 내용을 덮어써버린다.
( 이 상태에서 b브랜치를 생성하면 b브랜치에는 a브랜치에서 덮어써진 내용이 들어가고 또 다시 해당 파일에서 내용을 전부 삭제하고 새로 붙여넣은 후 main에서 B를 merge하면 또다시 B텍스트가 A를 덮어버린다.)

여기서 복사 붙여넣기를 하지 않고 기존 Format 내용에서 겹치는 부분에 있어서 수정을 하고 나머지 부분을 붙여넣는 식으로 진행을 했더니 간단하게 해결이 되었다.😊

merge의 병합과 충돌에 대해 더 많은 정보가 필요하다면 병합과 충돌 정리를 잘 해주신 분이 계셔, 글을 읽어보는 것도 좋을 것 같다.

반성..

사실 의도를 먼저 파악하고 그에 맞춰 과제를 진행했다면 차근차근 문제 없이 진행을 할 수 있었을 것이다. 하지만 첫번째 문제 파악을 실패하고 반복해서 문제가 풀리지 않자, 뒤늦게 의도를 파악했을 때에는 이미 머리속에서의 branch개념이 뒤죽박죽된 상황이었기 때문에 무엇이 문제가 되는지도 파악을 하지 못했던 것 같다.

항상 과제나 풀어야할 문제가 생기는 경우 의도를 파악하는 것과 그 함수나 명령어가 가진 의미(사용을 하는 이유)를 다시 한번 생각해보며 문제에 접근하는 연습을 해야겠다.

0개의 댓글