본문 바로가기

Git

Git 병합 : Git merge

Git 병합은 Git Branch 사용과 연관되어있다.

 

보기 쉽게 요약을 위에 적어둠

 - Git 병합은 커밋 시퀀스를 하나의 통합된 커밋 기록으로 결합한다

 - Git을 병합하는 두 가지 주요 방법은 빨리감기 병합과 3방향 병합이다

 - 두 커밋 시퀀스에서 충돌하는 변경 사항이 없으면 Git은 커밋을 자동으로 병합할 수 있다

 

Git 병합은 Git의 포크된 기록을 다시 통합하는 방법임

git merge를 사용하면 git 브랜치(branch)가 만든 독립적인 개발 라인을 단일 브랜치로 통합할 수 있음

 * 프로젝트를 진행할 때 각자 맡은 내용에 대해 구현을 진행중이거나 구현이 완료된 여러 파일들? 내지는 코드들을

하나의 폴더에 통합한다는 의미같음

 

병합을 반영하도록 현재 브랜치는 업데이트 되지만, 대상이 되는 브랜치는 전~혀 영향을 받지 않음

 * 내가 올릴 파일은 아무런 변동이 없으나 프로젝트가 올라가는 곳은 업데이트가 된다는 소리같다

 

git merge 명령은 종종 git checkout 명령과 함께 사용되어 현재 브랜치를 선택하며

git branch -d 와 함께 사용되어 사용되지 않는 대상 브랜치를 삭제한다

 * 어.. 써보면 알겠지

 

//

 

작동 방식

 

git merge는 여러 커밋 시퀀스를 하나의 통합된 기록으로 결합한다.

일반적으로 merge는 두 브랜치(branch)를 결합하는데 가장 자주 사용한다.

 

이하의 내용은 예제라고 하는데, 보기만 해선 뭔소린지 모르겠으니 일단 적고 본다.

 

예제에서는 브랜치 병합 패턴을 중점적으로 다룬다. 이 시나리오에서 git merge는 두개의 커밋 포인터?(브랜치 팁?)를 사용하며

두 포인터간에 일반적인 기준 커밋을 찾는다.

Git은 일반적인 기준 커밋을 찾으면 대기중인 각 병합 커밋 시퀀스의 변경 사항을 결합하는 새 '병합 커밋'을 만든다.

 

 

main 브랜치를 기준으로 하는 새로운 브랜치 기능이 있다고 가정하자.

이 기능 브랜치를 main에 병합하려고 한다!

위의 네모박스가 기준이 되는 main 브랜치, 밑의 네모박스가 기능 브랜치로 보인다.

 

 

이 명령(추정상 Git merge)을 호출하면 지정된 브랜치 기능이 현재 브랜치에 병합되는데, 이것을 main이라고 가정하겠다.

Git은 병합 알고리즘을 자동으로 결정한다.(아래에서 설명)

 

위의 네모박스가 병합된 기준이 되는 main 브랜치, 밑의 네모박스가 전~혀 영향을 받지 않은 기능 브랜치.. 같다

 

 

병합 커밋은 상위 커밋이 두 개 있다는 점에서 다른 커밋과 구별된다. (위의 그림 자체가 병합 커밋(merge commit)같다)

병합 커밋을 만들 때 Git은 사용자를 위해 별도의 기록을 자동으로 병합하려고 시도한다.

Git이 두 기록에서 변경된 데이터 조각을 발견하면 자동으로 결합할 수 없다.

이 시나리오는 버전 제어 충돌이며 Git이 이 작업을 계속하려면 사용자의 개입이 필요하다.