Git공부 [9. GIT Merge(3)]
🔐 0. 충돌에 대체하는 법
매번 포스팅하며 하는 말이지만 무언가를 공부할 때 내가 아는 것이 무엇이고 모르는 것이 무언인지 정확하게 알아야 올바른 학습이 된다고 생각한다.
내가 아는 것에 대해 완벽하게 이해하기 위해선 배우자고 하는 것의 원리를 정확하게 이해할 필요가 있다.
앞서 공부한 merge의 원리를 지금 어렴풋이 알고 있지만 merge의 충돌을 대비하기 위해 merge의 원리를 공부해본다.
이 트리를 예로 들어 설명하자면 이 트리에서 가장 가장 조상이 되는 즉 base가 되는 버전은 work 1이다.
- work 1버전에 만약
A B C D
가 있다고 가정하고 - o2 work 2에는 수정한
A X C Y
가 들어 있다. - master wokr 2에는 수정한
A B M M
가 들어 있다.
여기서 master work 2에서 o2 work 2를 merge하여 새로운 버전을 만들자고 했을 때 비교 대상은 o2 work 2의 A X C Y
와 master work 2의A B M M
이다 여기서 이루어 지는 비교는 AND연산이며 ‘A ! ! !`(!는 충돌이 발생)처럼 A를 제외하고 전부 충돌이 발생한다.
이것을 2 way merge라고 한다.
하지만 git에서는 base가 되는 work 1 A B C D
가 개입하게 된다.
비교대상에 work 1이 들어가게 되는데 A X C Y
와 A B M M
를 같이 OR연산을 포함해 비교할 때 A X M !
로 한가지 충돌만 발생하게 된다.
그 이유는 A B C D |
A B M M 를 비교 할 때 B는 수정이 되지 않았기 때문에 B를 가지고 A B C D |
A X C Y 를 비교하면 B -> X로 수정되었기 때문에 A X ! ! 으로 병합 되는 것이다. |
이것을 3 way merge라고 한다.
이처럼 git상에서 merge가 일어나는 원리를 이해하자..
📕실습
- 새로운 디렉토리에 git init하여 초기화
- work.txt파일 생성 후 A B C D저장
- add -> commit실행
- branch 두개 생성 ABTT, AHCH
- 각각 브랜치 checkout으로 전환 후 내용 ABTT, AHCH로 수정 후 커밋하여 버전생성
- checkout으로 AHCH로 전환 후 git merge ABTT실행 후 충돌 확인
- cat work.txt로 충돌 내용확인
사진 처럼 H | T만 충돌 발생 확인 |
✍️ GIT & 터미널 & 리눅스 용어 정리
https://opentutorials.org/course/3837 많은 도움을 받은 생활코딩입니다.
공부 정리내용은 생활코딩 및 구글링을 통한 내용을 정리하였습니다.
댓글남기기