참고 :
생활코딩. 지옥에서 온 깃.
https://www.opentutorials.org/course/2708/15263
깃(git)의 공식 홈페이지 Git SCM
- Documents / book (언어 : 한국어) : https://git-scm.com/book/ko/v2
- 3.2 Git 브랜치 - 브랜치와 Merge 의 기초
브랜치(branch)를 만들고 병합(merge)하는 크게 2가지 경우가 있다.
1. fast-forward
2. merge commit
위에 대해 이해해보자.
상태 : master 브랜치 commit 3번 함. (각 C0, C1, C2(현재))
상태 : 이슈(ISSUE. 기능의 추가, 버그의 수정 등..)가 발생하여, 브랜치 'iss53'을 만듦
$ git checkout -b iss53
= $ git branch iss53
$ git checkout iss53
'-b' 는 위 2줄의 명령어를 한번에!
상태 : 브랜치 'iss53'에서 이슈를 처리한 후, commit 'C3' 를 작성한다.
이슈를 처리했으니, 다시 마스터로 돌아간다.
상태 : 그런데, 갑작스런 문제 hotfix가 발생하여 브랜치 'hotfix', commit C4를 생성한다.
상태 : 긴급한 문제 'hotfix'를 처리 한 후, master로 다시 병합(merge : fast-forward방식) 한다.
마스터가 새로운 커밋을 생성하지 않았을 때,
마스터가 가르키고 있는 커밋(C2)에서 커밋(C4)으로 '빨리감기(fast-forward)'한다.
(C4는 C2에서 기반한 브랜치이기 때문에 이동만 한다.)
별도의 commit을 생성하여 병합을 하는게 아니라, master가 가르키고 있는 브랜치 포인터를 바꾸기만 한다.
그리고, 해결한 'hotfix'브랜치는 삭제한다. (중복 브랜치는 불필요)
명령어
$ git checkout master
$ git merge hotfix
Updating f42c576..3a0874c
Fast-forward
index.html | 2 ++
1 file changed, 2 insertions(+)
$ git branch -d hotfix
Deleted branch hotfix (3a0874c).
상태 : 다시 iss53으로 돌아와 처리한 후, commit 'C5'를 만든다.
이슈를 처리했으니 마스터로 돌아가 해결한 이슈를 병합(merge)해야한다.
$ git checkout master
Switched to branch 'master'
$ git merge iss53
Merge made by the 'recursive' strategy.
index.html | 1 +
1 file changed, 1 insertion(+)
git merge iss53을 통해 master와 iss53을병합 하면,
위 (fast-forward)와는 다르게 'recursive' strategy라는 설명이 나온다.
브랜치 'iss53' 가 만들어진 이후, master는 C4라는 새로운 커밋이 생성되었다.
그러므로 fast-forward가 되지 않는다.
이럴 때, git은 내부적으로
master와 iss53의 공통의 조상을 찾는다. - (C2)
그 다음 '3-way Merge'라는 방법으로 C4와 C5를 합친다.
다음, 합쳐진 결과를 새로운 커밋으로 만든다. (아래 C6)
병합을 할 때,
공동 선상에 있다면 fast-forward 방식으로 브랜치 포인터를 이동 시키기만한다.
하지만,
부모가 새로운 커밋을 생성했다면, 3-way merge를 통해 새로운 커밋을 생성하고 합쳐지게 된다.
'공부하기 > GitHub' 카테고리의 다른 글
깃 브랜치 (git branch) 6. stash (0) | 2018.12.07 |
---|---|
깃 브랜치 (git branch) 5. 브랜치 병합 시, 충돌 해결하기 (merge conflict) (0) | 2018.12.01 |
깃 브랜치 (git branch) 3. 브랜치 병합하기 (git merge) / 브랜치 삭제하기 (git branch -d) (0) | 2018.11.30 |
깃 브랜치 (git branch) 2. 브랜치 확인하기. 비교하기 (git log, diff, --branches --graph --decorate --oneline) (0) | 2018.11.29 |
깃 브랜치 (git branch) 1. 브랜치란? 브랜치 보기. 브랜치 만들기 (0) | 2018.11.29 |