이번 시간에는 branch
를 수련해보는 시간을 가져보도록 하겠습니다.
Git - 이 링크를 통해 Git 사이트에 접속할 수 있습니다.
빨간색 글씨의 Documentation
에 들어가줍니다.
이후 좌측의 Book
을 클릭합니다.
친절하게도 번역이 다 되어있기 때문에 좌측에 자신의 언어에 맞는 걸 선택하면 됩니다.
아래에 3-2 Basic Branching and Merging
에 들어가줍시다.
위 그림이 의미하는 바는 master
인 branch
가 commit
을 3번 했다는 의미입니다.
하지만 이때 이슈가 생길 수 있습니다. 기능의 추가와 버그의 수정이 그것입니다.
이러한 이슈가 생길때 git
이 하는 일이 바로 branch
입니다.
이후 아래쪽에 내려가보면 다음과 같은 명령이 있습니다.
$ git checkout -b iss53
에서 의미하는 바는
-b
옵션을 통해 branch
와 checkout
을 동시에 하는 것입니다.
따라서 C2
라는 commit
가 master
, iss53
둘다 가르키게 됩니다.
이 상태에서 iss53
에서 vim index.html
을 통해 내용을 수정하고 commit
을 하면
위와 같은 형태가 됩니다. 즉 iss53
에서 새로운 C3
의 커밋을 만든것입니다.
그런데 갑자기 급하게 처리해야할 일이 발생 했습니다.
이후 git checkout master
을 실행합니다.
그리고 hotfix
라는 branch
를 만들기 위해 git checkout -b hotfix
을 실행합니다.
vim index.html
와 git commit -a -m 'Fix broken email address'
명령을 통해 다음과 같은 구조가 형성 되었습니다.
이후 hotfix
내용을 전부 수정하고 master
로 병합을 할려고 하면
먼저 git checkout master
을 하고 git merge hotfix
을 실행합니다.
이때 다음과 같은 문구가 나타납니다.
Fast-forward
index.html | 2 ++
1 file changed, 2 insertions(+)
Fast-forward
는 빨리감기라는 뜻인데 , master
은 현재 어떠한 commit
도 새로 만들지 않은 상태입니다. 이 때 hotfix
로 병합한다는 것은 바로 옆에있는 hotfix
로 빨리감기(병합) 한다 라고 말합니다.
이러한 작업을 Fast-forward
작업이라고 하고 그 결과는
다음과 같습니다. 즉 master
는 hotfix
와 같은 commit
을 가르킵니다. 그렇기 때문에 별도의 commit
은 생성하지 않습니다.
이전에 merge
를 사용할때는 별도의 commit
을 생성했는데 , 이 경우에는 그저 master
가 가르키는 commit
만 변경해줍니다.
이후 hotfix
는 쓸모가 없어졌으므로 git branch -d hotfix
을 통해 삭제해줍니다.
이후 다시 issu53
의 문제를 해결 하기 위해서
git checkout iss53
, vim index.html
git commit -a -m 'Finish the new footer [issue 53]'
명령을 실행해줍니다.
따라서 위와같은 구조가 됩니다. 이후 issu53
에 대한 수정이 모두 끝났다면 어떻게 해야 할까요?
master
로 checkout
하고 issu53
을 master
로 merge
하면 됩니다.
git checkout master
이 후 git merge iss53
명령을 실행시 다음과 같은 문구가 나옵니다.
Merge made by the 'recursive' strategy.
index.html | 1 +
1 file changed, 1 insertion(+)
이때 유심히 봐야할 것은 , isuu53
에서 처음 수정을 시작한 파일 , 즉 조상은 C2
입니다. 하지만 master
는 현재 C2
가 아니라 C4
를 가리키는 상태입니다.
이 경우에는 Fast-forward
를 할 수 없습니다.
따라서 git
은 다음과 같은 동작을 수행합니다.
master
와 issu53
의 공통 조상을 찾습니다.three-way merge
라는 방법을 통해 C4
와 C5
를 합치고commit
를 새로 만듭니다.따라서 다음과 같은 구조로 이루어 집니다.
현재까지 merge
에 대한 총 2가지 방법을 알아봤습니다.
첫번째로 Fast-forward
는 commit
을 생성하지 않고
Fast-forward
가 아닌 방식은 merge commit
이라는 새로운 commit
을 생성합니다.
위 내용은 직접 git
의 Documentation
을 읽어보면서 혼자서 수련해보는 시간을 가지는 것을 추천합니다.