병합
병합(merge)는 두 곳에서 나타날 수 있다.
1. merge
> 해당 HEAD가 있는 A_branch를 다른 B_branch에 merge하는 경우
2. pull
> pull은 두 동작으로 구성된다.
fetch + merge
1) fetch는 커밋 정보를 불러오고,
2) merge는 위처럼 병합한다.
> 결국 pull은 merge를 포함하는 것
병합의 종류
1. 빨리감기(Fast-forward)
> 한 쪽의 변경(main은 변경 X, branch만 변경 O)만 존재하여 분기점 이후 새 커밋이 없어 포인터를 최신상태로 옮기면 되는 경우
(main) : A --- B
\
(feature) : C --- D
▼: git merge feature
(main, feature) A --- B --- C --- D
2. 병합(Merge)
> 양쪽 브랜치 모두 변경(branch에서 변경 -> main에서도 추가 변경)하는 경우
(main) : A --- B --- C
\
(feature) : D --- E
▼: git merge feature
(main) : A --- B --- C ------- F
\ /
(feature) : D --- E -------
: 새로운 병합 커밋(F)를 생성하게 됨.
2.1 병합결과
1) 자동병합
> 충돌되는 부분이 없는 경우 자동병합을 한다.
2) 병합충돌
> 충돌되는 부분이 있다면 병합충돌이 일어난다.
병합충돌(Merge Conflict)
> 병합충돌이란 위의 병합(Merge)과정에서 같은 파일이나 같은 폴더에 대해 서로 다른 수정을 했을 때 Git 내부적으로 병합을 멈추고, 병합 내용을 표시한 임시 결과물을 생성해주는 과정을 말함
1. Working Tree
: 우리가 실제로 보는 파일 및 폴더 상태를 말함
1) 일반적인 경우
> HEAD를 기준으로 보여줌(일반적인 상태)
2) 병합상태인 경우
> 임시 결과물을 바탕으로 보여줌(병합충돌이 발생한 부분이 반영된 임시 상태)
2. 병합충돌의 경우와 해결방법
1) main과 branch에서 같은 파일의 같은 줄을 수정한 경우
> 이 경우 즉시 병합을 중지한다.
▼ Working Tree는 아래와 같이 충돌 부분을 표시하게 된다.
<<<<<<< HEAD
(main의 내용)
=======
(branch의 내용)
>>>>>>> branch
1.1) 해결방법
▼ 위의 내용을 아래처럼 수정
modified main && branch
> commit && push를 하면 병합 충돌은 해결된다.(하나의 예)
2) main에서는 삭제한 파일을 branch에서 수정한 경우(반대의 경우도 같음)
> 이 경우도 즉시 병합을 중지한다.
> Woring Tree는 수정된 파일을 다시 생성한 임시 상태를 표시하게 된다.
2.2) 해결방법
> 사용자는 수정한 파일을 그대로 둘 것인지, 삭제할 것인지 선택하여, commit && push를 하면 병합충돌은 해결된다
3. 결론
병합충돌과 해결과정은 총 세 단계로 이루어진다.
첫째. Git이 병합을 멈추고, 충돌이 나는 부분을 임시로 보여준다.
둘째. 충돌이 나는 부분을 확인하고, 선택에 따라 변경한다.
셋째. 변경한 부분을 수동으로 commit && push 한다.
'LMS 7 > 개발일지' 카테고리의 다른 글
| 25.10.28 개발일지 MFC 프로젝트 3일차(Pylon, openCV) (0) | 2025.11.13 |
|---|---|
| 25.10.27 개발일지 / C++ MFC 프로젝트 2일차 (0) | 2025.11.13 |
| 25.10.24 개발일지 / MFC 프로젝트 1일차 (0) | 2025.11.13 |
| 25.10.22 개발일지 / (주)그림 (0) | 2025.11.13 |
| 25.10.21 개발일지 (0) | 2025.11.13 |