< 현재 상태>


"exp_1" branch를 "master" branch로 병합하려면 먼저 "master" branch로 체크아웃한 후 "git merge exp_1"을 하면 branch가 병합된다.



merge 된 것을 알 수 있다. => "parent" 가 "5" 버전이랑 "exp_1" branch 였던 "3" 버전이 된다. 즉, 두 개의 부모를 갖는 하나의 새로운 커밋이 생성된다.



"exp_1"로 체크아웃한 다음에 master을 병합했다. 그 결과 HEAD를 보면 exp_1과 master가 같은 것을 볼 수 있다.



master와 exp_1 branch가 같아졌기 때문에 "git branch -d exp_1" 명령어로 exp_1 branch를 지었다.



< 병합 방식 >

병합 방식에는 "fast-forward" 방식과 "fast-forward"가 아닌 방식이 있다.

위 그림을 보면 "master" branch는 현재 c2 버전이고 "hotfix"는 c4 버전, "iss53"은 c3 버전이다.


"master"로 체크아웃한 후 "hotfix"를 병합했다. "Fast-forward" 방식으로 merge 된 것을 볼 수 있다.


merge 하기 전 "hotfix" branch의 버전 "c4"가 "master" branch의 버전 "c2"의 내용을 이미 다 알기 때문에 "master" branch는 merge 할 때 단순히 c4 버전을 가리키기만 하면 된다. 이런 방식을 fast-forward(빨리 감기) 방식이라고 하며 별도의 커밋을 생성하지 않고 마스터가 가리키는 곳을 바꾼다.


"master"로 체크아웃한 후 "iss53" branch와 merge 했다. 보면 "fast-forward" 방시이 아닌 것을 알 수 있다.


merge 되기 전에 "master"은 c4 버전으로 c5버전에서 갖지 않는 부분을 가지고 있다. "iss53" 또한 "master"의 c4 버전에 없는 것을 가지고 있기에 새로운 커밋 c6를 만들어서 서로를 merge 해야 한다. 그래서 "master" branch가 c6 버전을 가지게 되고 c4와 c5에서 커밋되었다는 정보를 가지고 있다.(parent) 위 명령어 부분을 보면 'recursive' strategy라고 되어 있다. 해당 방식은 branch들의 공통 조상을 찾고(c2를 찾고) 3-way-merge라는 내부적인 방법으로 c4와 c5를 합쳐 별도의 커밋을 만드는 방식이다.


*git checkout -b "브랜치 명" : branch를 만든 후 해당 branch로 바로 체크아웃하는 명령어

'Git(생활코딩)' 카테고리의 다른 글

Git - branch 병합 시 충돌 해결  (0) 2017.06.15
Git 혁신(2) - branch 정보 확인  (0) 2017.06.13
Git 혁신(1) - branch  (0) 2017.06.12
Git 원리(2) - commit  (0) 2017.06.11
Git 원리(1) - git add  (0) 2017.06.09

+ Recent posts