ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • (git) 8 - Git 실습 (고급) fast-forward merge / 3 way merge
    개발/git 2024. 10. 14. 23:47

    ■ 브랜치 포인터

     

     

    commit 을 하면 main 브랜치가 생긴다고 오해하는데 그게 아니라,

    우리가 add 한 것이 점으로 찍히면서 그 기능을 main branch 가지가 가리키게 되는 것이다. 

     

    따라서 새로운 기능을 만들면 mb 포인터가 새로운 기능을 가리킨다. 

     

     

    새로운 브랜치 topic 을 만들고 기능을 개발한다고 하면,

    브랜치가 생기는 것이 아니라 tb 포인터가 가리키게 되는 것이다. 

     

     

    tb 포인터가 개발을 하고 커밋을 하면, main 브랜치 포인터는 그대로 있고

    tb 포인터만 그것을 가리키게 된다. 

     

     

    사진처럼 형상이 그대로 이어졌다면, mb 브랜치가 병합되고 싶다면

    아이디 중복체크 완료로 mb 포인터가 이동하면 된다. 

     

    이렇게 포인터만 이동했다고 해서 fast-forward merge 라 한다. 

     

     

    그런데 아이디 중복 완료를 만들고 나서 merge 를 하기 전에 

    main 에 글쓰기 기능이 개발이 되면, 그때는 새로운 가지가 만들어지게 된다. 

     

    여기서 mb 포인터가 아이디 중복 완료로 포인터로 이동하면 글쓰기 기능을 잃게 된다.

    따라서 이럴 때 3 way merge 를 하게 된다. 

     

     

    보라색 점 3개를 통해서 어느 브랜치에 merge 를 할 지 결정한다. 

    보통은 tb 를 mb 에 merge 한다. 

     

    이렇게 mb 브랜치에 아이디 중복 완료가 생성되고,

    mb 포인터가 아이디 중복 완료로 이동되고, tb 포인터는 topic 브랜치의 아이디 중복 완료에 머무른다. 

     

    ■ 실습 (Fast-forward)

     

    새로운 영역을 git 영역으로 만들고 회원가입과 로그인 파일을 만든다음 각각 커밋해준다. 

     

    ※ touch 파일명.txt : 텍스트 파일 생성

     

     

    git branch : 현재 브랜치는 master 이다.

     

     

    git bracnc 브랜치명 : 브랜치 생성하기

     

    현재 생성된 브랜치와 마스터 둘 다 로그인을 바라보고 있는 것을 알 수 있다.

     

     

    git checkout 브랜치명 : 해당 브랜치로 이동

     

     

    topic 브랜치에서 새로운 파일 생성 후 git add . git commit 까지 해주기

     

     

    마스터 브랜치 포인터는 로그인을 가리키고,

    토픽 브랜치 포인터는 아이디 중복체크를 가리킨다. 

     

     

    현재 상태를 그림으로 나타내면 다음과 같다.

    즉, mb 브랜치 상황에서는 회원가입과 로그인만 보이고,

    tb 브랜치에서는 회원가입, 로그인, 아이디 중복체크가 보이는 것이다.

     

     

    commit 을 하면 헤더가 이동하는데, checkout 을 하는 순간 헤더가 tb 포인터로 이동한다. 

    헤더가 이동되는 순간 그 쪽으로 작업한다는 듯이다.

     

     

    즉 commit 을 한 tb 브랜치에 헤더가 따라간다. 

     

     

    mb 체크아웃을 하면 다시 header 가 이동한다. 

     

     

    아이디 중복체크로 merge 하는 방법은 다음과 같다. 

     

    1. checkout 을 통해 mb 포인터로 헤더를 이동한다.

    2. merge tb : 토픽 브랜치를 머지한다. 

     

    토픽 브랜치를 머지하게 되면, mb 포인터가 tb 브랜치가 있는 곳으로 이동되게 되고

    해당 가지가 마스터브랜치가 되고, 헤더는 mb 포인터를 가리키게 된다. 

     

     

    master 로 checkout 해서 mb 포인터로 헤더를 옮기고

    우리가 옮기고자 하는 tb 로 merge 를 진행한다. 

     

    이는 코드에 나와있듯이 Fast-forward merge 이다. 

     

     

    git log 를 보면 mb 포인터가 아이디 중복체크로 이동되고 헤더도 그쪽으로 이동된 것을 확인할 수 있다. 

     

    ■ 실습 (3 way merge)

     

    git checkout -b 브랜치명 : 체크아웃 하면서 브랜치 만들기

     

     

    topic 브랜치에서 아이디중복체크 만들고 add, commit 진행

     

     

    master 로 체크아웃하고 글쓰기 파일 만들고 마찬가지로 git add . commit 진행

     

     

    그러면 사진과 같은 형태가 된다. 

     

     

    로그를 보면 head 는 글쓰기에 있고, mb 포인터도 글쓰기에 있다. 

     

     

    사진과 같이 3가지 부분을 본다햇 3 way merge 라 한다. 

     

     

    git merge topic 을 치면 log 를 어떻게 남길지 뜬다. 

     

     

    이렇게 git log 를 보면 topic 에 있던 아이디 중복체크가 들어온 것을 확인 가능하다. 

     

    즉, 정리하자면 git checkout 을 통해 작업할 브랜치(헤드 포인터가 가리키는 브랜치)를 설정하고,

    git merge (병합할 브랜치 이름) 을 통해 체크아웃한 브랜치에 병합할 브랜치의 내용을 병합하는 것이다.

     

    따라서 우리는 master 브랜치에다 topic 의 commit 내용을 병합하게 된 것이다.  

     

    출처 : https://www.inflearn.com/course/%EA%B9%83-%EC%9E%85%EB%AC%B8/dashboard

     

    [지금 무료] 지옥에서 온 관리자 Git 강의 | 최주호 - 인프런

    최주호 | “소규모 협업을 통해 프로젝트 개발을 하고 싶은데 어떻게 해야 할지 모르겠어요!” “취업을 앞둔 취준생인데 Git을 몰라요!” 취준생, 주니어 개발자 등 프로그래머라면 꼭 알아야

    www.inflearn.com

     

Designed by Tistory.