Day_12 ( Git branch & merge )

HD.Y·2023년 11월 14일
0

한화시스템 BEYOND SW

목록 보기
13/58
post-thumbnail

Branch 란 무엇인가

  • Branch(브랜치) : 원본을 수정하지 않고 안전하게 새로운 기능을 추가해볼 수 있도록 하는
             프로젝트의 복사본

  • 하나의 프로젝트에 여러명의 개발자들이 참가한다고 할때, 동일한 소스코드를 함께 공유하게 된다. 이때 동일한 소스코드를 가지고 어떤 개발자는 새로운 기능을 개발할 수 있고, 다른 개발자는 버그를 수정하기도 할 것이다.

  • 여럼 사람이 동일한 소스 코드를 기반으로 서로 다른 작업을 할 경우 각각 다른 코드가 만들어 지는데, 이처럼 동시에 다양한 작업을 할 수 있고 만든 뒤에 하나로 모으기 위해 사용하는 기능이 Branch 이다.

  • Branch 를 이용하면 분리된 자기만의 독립적인 로컬 저장소에서 각자 작업을 한 다음
    그 내용들을 하나로 모으는 것이 가능해진다.

  • 그래서 보통 프로젝트를 시작할 때, 기본적인 메인 브랜치가 생성되고 프로젝트에 참가하는 개개인의 개발자들은 본인이 맡은 기능을 구현하기 위해 각자 Branch 를 생성하여 작업을 하고 작업한 내용을 메인 브랜치에 적용한다고 한다.


  • Branch 명령어 정리 ✏️

    1) Branch 생성 : git branch [branch명]
    2) Branch 목록 출력 : git branch -l
    3) Branch 변경 : git checkout [변경할 branch명]
    4) 생성된 Branch log 출력 : git log [--all] --graph

    • 처음 커밋을 실행하면 master branch 가 생성되는데, 위처럼 새로운 branch를 생성하고 branch를 변경해줬을때 변경된 것을 볼 수 있다.

  • Git Branch 전략
    : Git에서 Branch를 체계적으로 생성하고 관리하기 위한 일종의 규칙이다.
     ( 반드시 해야되는 건 아니나 우리는 프로젝트 시 이 규칙을 따르기로 했다. )

    1) Master Branch : 제품으로 출시될 수 있는 브랜치로 배포 가능한 상태만을 관리
    2) Develop Branch : 기능 개발을 위한 브랜치들을 병합하기 위해 사용
    3) Feature Branch : 기능을 개발하는 브랜치로 작업이 완료되면 Develop Branch로 통합
    4) Hotfix Branch : 배포한 버전에서 긴급하게 수정을 해야 할 경우 사용


Merge 란 무엇인가

  • Merge(병합) : git 에서 생성한 branch 를 하나로 합치는 과정을 말하는 것으로, 각각의
           개발자들이 작업한 branch 가 있을때 이를 main branch 로 합치는
           과정이라 보면 된다.

  • 명령어 : git merge [branch 이름]

  • Merge의 3가지 방법 ✏️
    1) 3-way-merge : 서로 다른 두 커밋을 가진 branch가 하나로 병합하는 과정에서
             두 branch가 양쪽의 이력을 그대로 보존하고자 새로운 병합된 커밋을
             만들면서 병합하는 방식

    • 실습해보는 방법 💻
      (1) 새로운 폴더를 생성한뒤 "git bash" 창을 열고 로컬 저장소를 생성해준다.
      (2) 생성한 폴더에 "test01.txt" 파일을 생성하고 커밋해준다.
      (3) 위의 Git Branch 전략을 따라해보기 위해 develop branch를 생성한다.
      (4) develop branch로 변경하여 회원가입 기능 branch
         ( git branch feature/signup ) 와 게시판 기능 branch
         ( git branch feature/storyboard ) 2개를 생성해준다.
      (5) feature/signup branch 로 변경하여 "test02.txt" 파일을 생성한 뒤 커밋해준다.
      (6) feature/storyboard branch 로 변경하여 "test03.txt" 파일을 생성한 뒤
         커밋해준다.
      (7) develop branch 로 변경하여 feature/signup branch 를 merge 해준다.
      (8) 이어서, feature/storyboard branch 도 merge 해준다.
      (9) git log --all --graph 를 입력하면 아래와 같이 branch가 형성된것을
         볼 수 있다.

       ➡ branch 진행 과정을 살펴보면 : 최초 develop branch 에서 2개의 signup,
         storyboard branch를 생성하였을때는 2개의 branch가 모두 동일한
         develop branch 로 부터 파생되었다.

       ➡ 하지만 develop branchsignup branch 를 merge 하는 순간 develop
         branch 에는 signup branch의 내용이 추가되기 때문에 기존에 storyboard
         branch가 파생된 develop branch 와 달라지게 된다.

       ➡ 따라서 병합된 develop branchstoryboard branch와 다시 merge 할때
         2개의 branch 가 서로 다른 커밋을 가지고 있기 때문에 "3-way-merge" 가 되어
         하나의 새로운 병합된 커밋이 만들어지면서 merge 되는 것이다.


    2) Fast-forward-merge : 한쪽 branch에서만 변경사항이 일어났고, 일어난 변경사항을
                 다른 branch로 병합하는 방식

    • 실습해보는 방법 💻
      (1) 새로운 폴더를 생성한뒤 "git bash" 창을 열고 로컬 저장소를 생성해준다.
      (2) 생성한 폴더에 "test01.txt" 파일을 생성하고 커밋해준다.
      (3) 위의 Git Branch 전략을 따라해보기 위해 develop branch를 생성한다.
      (4) develop branch로 변경하여 회원가입 기능 branch
        ( git branch feature/signup ) 를 생성해준다.
      (5) feature/signup branch 로 전환하여 "test02.txt" 파일을 생성한 뒤 커밋해준다.
      (5) develop branch 로 변경하여 feature/signup branch 와 merge 한다.
      (6) develop branch 에서 게시판 기능 branch( git branch feature/storyboard )
         를 새로 생성해준다.
      (6) feature/storyboard branch 로 변경하여 "test03.txt" 파일을 생성한 뒤
         커밋해준다.
      (7) develop branch 로 변경하여 feature/story branch 를 merge 해준다.
      (8) 이어서, feature/storyboard branch 도 merge 해준다.
      (9) git log --all --graph 를 입력하면 아래와 같이 branch가 형성된것을
         볼 수 있다.

       ➡ branch 진행 과정을 살펴보면 : 최초 develop branch 에서 signup branch
         생성한 뒤 파일 추가 후 develop branch 에서 merge 했을때는 develop
         branchsignup branch 기능이 추가되면서 기존의 develop branch
         변경되어 새로운 develop branch 가 형성된다.

       ➡ 다음으로, 변경된 develop branch 에서 storyboard branch 를 생성했을때
         storyboard branch 는 변경된 develop branch 에서 파생되었기 때문에
         "3-way-merge" 때와는 다르게 동일한 develop branch 로부터 생성된 것이다.

       ➡ 따라서 develop branch 에서 storyboard branch 를 merge 해주면 처음부터
         쭉 한개의 branch 에서 변경사항이 일어났기 때문에 위와 같이 "git log" 를
         출력했을때 일직선으로 출력되는 것이다.


    3) Rebase and merge : 기존 branch의 base 를 옮기고 새로운 branch와 병합하는
                 방식으로 보통 git history를 깔끔하게 하고 싶을때 사용한다.

    • 실습해보는 방법 💻
      (1) 새로운 폴더를 생성한뒤 "git bash" 창을 열고 로컬 저장소를 생성해준다.
      (2) 생성한 폴더에 "test01.txt" 파일을 생성하고 커밋해준다.
      (3) 위의 Git Branch 전략을 따라해보기 위해 develop branch를 생성한다.
      (4) master branch로 변경하여 회원가입 기능 branch를
         ( git branch feature/signup ) 생성한다.
      (5) 현재, signup branch 의 base 는 master branch 인 상태이다.
         여기서 rebase 를 사용하면 base 가 변경되는 것이다.
      (6) signup branch 에서 git rebase develop 를 해주면 signup branch
         base는 master branchdevelop branch 로 변경되는 것을 볼 수 있다.

  • 이렇게 완성된 branch를 github로 push 해주면( git push -u origin [braanch명] ) 깃허브에 업로드 된다.

  • 다음으로 github에 업로드 된 것을 불러오기 위한 명령어로는 2가지가 있다.
    1) git pull origin [branch명] : branch를 가져오고 자동으로 merge 까지 수행
    2) git fetch origin [branch명] : branch를 가져오는데 merge는 자동으로 하지 않고,                    직접 확인 후 수동으로 진행 후 작업


Github 에서 merge 하는 방법

  • merge를 위 처럼 "git bash" 에서 수행할 수 있으나, Github 에서도 가능하다.

  • 진행 절차 ✏️
    1) github에서 새로운 repo 생성 및 원격 저장소 연결
    2) develop branch 생성 후 파일 추가, 커밋 후 push
    3) feature/signup branch 생성 후 파일 추가, 커밋 후 push
    4) 그러면 아래와 같이 github 에 branch 들이 생성된 것을 볼 수 있는데, 여기서
      develop branchsignup branch 를 merge 하기 위해 "Pull requests" 를
      클릭한다.


    5) 다음으로 아래와 같이 "Compare & pull request" 를 클릭한다.


    6) 다음으로 아래와 같이 "title" , "Add a description" 을 작성 후 "Create pull request"
       클릭한다.

     ➡ 이때, 오른쪽의 "Reviewers" 로 merge comment 를 나눌 팀원을 추가해 줄 수도 있다.

    7) 마지막으로 "Merge pull request" 를 클릭 후 "Confirm merge" 를 클릭한다.

     ➡ 이때, 혹시나 merge 하는 것에 대한 의견이 있다면 "comment" 를 남기면 된다.

    8) 정상적으로 merge 를 성공하면 아래와 같은 화면을 볼 수 있다.


오늘의 느낀점 👀

  • 오늘은 git 에서 branchmerge 에 대해 학습한 시간이었다. 회고 내용은 주로
    "git bash" 에서 작업한 내용이지만, 실제로는 "Intellij" 를 이용하여 코딩하고 git 작업까지 다 한다고 하여 Intellij 에서 git 작업하는것 또한 병행하여 실습하였다.

  • 본격적으로 프로젝트에 들어가기에 앞서, git 과 github 사용법에 대해 전반적으로 알아봄으로써 프로젝트 사전 준비를 마친 하루였다. 실습해보면서 느낀건 팀원들간의 상호 소통이 중요할 것 같다는 생각이 들었다.

  • github로 본인의 작업을 "push" 하고 팀원들이 실시한 작업을 "pull" 해올때 생각보다 매끄럽게 잘 안되었는데, 서로 간의 원활한 소통 및 정해진 규칙을 잘 따른다면 전혀 문제 없을 것 같다.🤔

  • 가장 중요한건❗ Master 역할의 팀장이 초기 git 구성을 잘 구성하고, 팀원들은 구성된 작업을 개인의 로컬 저장소로 이상없이 가져와서 ❗그때부터❗ branch 를 만들어서 각자가 맡은 역할을 개발하는 것인 것 같다.

  • 여기서 하나라도 잘못된 상태에서 시작하면 그 뒤로도 쭉 오류가 발생하는것을 오늘 실습하면서 겪었다. 실제 프로젝트 때 이부분을 최대한 유의하여 💥시작이 반이다💥 라는 말이 있듯이, 시작할때부터 제대로 구성을 해야겠다고 느낀다.

profile
Backend Developer

0개의 댓글