IT STUDY LOG

[Git과 버전 관리 시스템] 03. Git Branch 본문

devops bootcamp 4/개발 및 배포

[Git과 버전 관리 시스템] 03. Git Branch

roheerumi 2023. 3. 21. 20:27

# 학습 목표

  • Git의 환경설정을 할 수 있다.
    • 버전 관리 시스템의 필요성을 이해할 수 있다.
    • Github과 Git의 관계에 대해 이해할 수 있다.
    • Repository에 대해 이해할 수 있다.
    • Local Repository와 Remote Repository의 차이를 이해할 수 있다.

 


# 학습 내용

1.  Git Branch

  • 브랜치란?
    • 개요
      • 독립적으로 어떤 작업을 진행하기 위한 개념
    • 장점
      • 한 소스코드에서 동시에 다양한 작업 가능
      • 소스코드의 한 시점과 동일한 상태를 만들고, 브랜치를 넘나들며 작업을 수행 가능
      • 각각의 브랜치에서 생긴 변화가 다른 브랜치에 영향을 주지 않고 독립적으로 코딩을 진행 가능
      • 각자의 브랜치에서 맡은 영역에 대한 작업을 진행한 후, 작업이 끝난 브랜치는 통합 브랜치에 병합해서 변경 사항을 적용
      •  '작업 단위', 즉 브랜치로 그 작업의 내용들이 모두 기록되기 때문에 문제가 발생했을 때 원인이 되는 작업을 찾아내거나 그에 따른 대책을 세우기 쉬워짐

[그림] 여러 브랜치를 만든 레파지토리의 Git Graph (이미지 출처 : Git Beginner's Guide for Dummies)

  • 브랜치 종류
    • 통합 브랜치 (Integration Branch) : 배포될 소스 코드가 기록되는 브랜치 (ex) main, master
    • 피처 브랜치 (Feature Branch) : 기능 추가, 버그 수정과 같이 단위 작업을 위한 브랜치로 통합 브랜치로부터 만들어지며 피처 브랜치에서 하나의 작업이 완료가 되면 통합 브랜치에 합하는 방식으로 진행브
  • 브랜치 전략 참고 레퍼런스 : https://hellowoori.tistory.com/56

 

2. 브랜치 명령어 모음

내용 명령
새로운 브랜치 생성 $ git branch 새로운 브랜치 이름
새로운 브랜치 생성 후 해당 브랜치로 전환 $ git switch -c 새로운 브랜치 이름
$ git checkout -b 새로운 브랜치 이름
브랜치 목록 확인 $ git branch
브랜치 목록과 각 브랜치의 최근 커밋 확인 $ git branch -v
브랜치 삭제 $ git branch -d 삭제할 브랜치 이름
$ git branch -D 해당 명령어는 병합하지 않은 브랜치를 강제 삭제하는 방법입니다.
브랜치 전환 $ git switch 브랜치 이름
$ git checkout 브랜치 이름
브랜치 병합 master 브랜치로 dev 브랜치를 병합할 때 (master ← dev)
$ git checkout master
$ git merge dev
로그에 모든 브랜치를 그래프로 표현 $ git log --branches --graph --decorate
아직 commit 하지 않은 작업을 스택에 임시로 저장 $ git stash

 

3. 프로젝트 workflow

  • fork, clone
    • remote에 생성한 프로젝트 repository를 각자의 repository로 가져오기
  • gir checkout -b / git witch -c
    • 브랜치를 생성하고 새로운 브랜치로 이동하기
    • HEAD는 현재 위치의 커밋
    •  Remote Repository 에도 생성한 브랜치를 반영하기 위해서는 git push origin dev 명령어를 입력
  • git branch
    • 생성한 브랜치 목록 및 현재 위치한 브랜치 확인하기
  • 여러 브랜치 생성하기
  • git checkout / switch 이동할 브랜치 이름
    • merge를 하기 위해서는 병합이 될 브랜치로 이동해야함 (예) feat/login-oauth를 feat/login으로 병합하기 위해서는 feat/login으로 이동해야 함
  • gir merge 병합할 브랜치 이름
    • 브랜치 병합 방식
      • fast-forward 방식 : 별도 커밋 생성하지 않고 병합될 브랜치가 가리키는 커밋을 병합할 브랜치가 생성한 커밋으로 변경하는 것
      • merge commit 방식 : 브랜치가 줄기처럼 분기한 후 병합하는 모양
    •  feature/login-oauth 브랜치가 머지되기 전 feature/login 브랜치에 추가적인 커밋이 없으므로, 브랜치가 분기될 필요가 없으므로 자동적으로 fast-forward 방식으로 병합이 이뤄짐
    • merge commit 방식
  • rebase vs merge
    • rebase (=fast-forward) merge(=merge commit)
      - branch base를 이동시킨다는 뜻
      -머지처럼 브랜치 통합을 목적으로 하지만, 특정 시점으로 브랜치가 가리키는 곳을 변경하는 기능
      - 변경 내용의 이력이 모두 그대로 남아 있기 때문에 이력이 복잡해 
  • git push origin 브랜치명
    • remote repository로 해당 브랜치를 업로드
  • pull request
    • 내가 push한 변경 사항에 대해 다른 사람들에게 알려 코드 리뷰하고 브랜치로의 반영 요청
  • 전체 흐름 workflow

출처 : 코드스테이츠 devops 부트캠프 과정
Comments