#18 Git - Branch 수련

김현준·2022년 12월 23일
1

GIT

목록 보기
18/41

이번 시간에는 branch 를 수련해보는 시간을 가져보도록 하겠습니다.

Git - 이 링크를 통해 Git 사이트에 접속할 수 있습니다.

빨간색 글씨의 Documentation 에 들어가줍니다.

이후 좌측의 Book 을 클릭합니다.
친절하게도 번역이 다 되어있기 때문에 좌측에 자신의 언어에 맞는 걸 선택하면 됩니다.

아래에 3-2 Basic Branching and Merging 에 들어가줍시다.

위 그림이 의미하는 바는 masterbranchcommit 을 3번 했다는 의미입니다.
하지만 이때 이슈가 생길 수 있습니다. 기능의 추가와 버그의 수정이 그것입니다.
이러한 이슈가 생길때 git 이 하는 일이 바로 branch 입니다.

이후 아래쪽에 내려가보면 다음과 같은 명령이 있습니다.

$ git checkout -b iss53 에서 의미하는 바는
-b 옵션을 통해 branchcheckout 을 동시에 하는 것입니다.

따라서 C2 라는 commitmaster , iss53 둘다 가르키게 됩니다.

이 상태에서 iss53 에서 vim index.html 을 통해 내용을 수정하고 commit 을 하면

위와 같은 형태가 됩니다. 즉 iss53 에서 새로운 C3 의 커밋을 만든것입니다.

그런데 갑자기 급하게 처리해야할 일이 발생 했습니다.
이후 git checkout master 을 실행합니다.
그리고 hotfix 라는 branch 를 만들기 위해 git checkout -b hotfix 을 실행합니다.

vim index.htmlgit 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 작업이라고 하고 그 결과는

다음과 같습니다. 즉 masterhotfix 와 같은 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 에 대한 수정이 모두 끝났다면 어떻게 해야 할까요?
mastercheckout 하고 issu53mastermerge 하면 됩니다.

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 은 다음과 같은 동작을 수행합니다.

  • masterissu53 의 공통 조상을 찾습니다.
  • three-way merge 라는 방법을 통해 C4C5 를 합치고
    그것에 대한 commit 를 새로 만듭니다.

따라서 다음과 같은 구조로 이루어 집니다.

현재까지 merge 에 대한 총 2가지 방법을 알아봤습니다.

첫번째로 Fast-forwardcommit 을 생성하지 않고
Fast-forward 가 아닌 방식은 merge commit 이라는 새로운 commit 을 생성합니다.

위 내용은 직접 gitDocumentation 을 읽어보면서 혼자서 수련해보는 시간을 가지는 것을 추천합니다.

profile
울산대학교 IT융합학부 22학번

0개의 댓글