branch

  • git에서 브랜치는 개발의 독립적인 라인
  • 소프트웨어 개발시 개발자들은 동일한 소스코드를 함께 공유하고 다룸 -> 각각 서로 다은 버전의 코드가 만들어짐
  • 여러 개발자들이 동시에 다양한 작업을 할 수 있게 해주는 기능이 브랜치(Branch)
  • 각각의 독립적인 작업 영역(저장소) 안에서 마음대로 소스코드를 변경할 수 있음

branch의 이해

  • git으로 버전관리 시작시 기본적으로 브랜치가 생성된 상태로 작업 수행 (메인 브랜치)
  • 마스터 브랜치가 존재하는 상황에서 수정 또는 새로운 개발이 필요하다면 이를 바로 마스터 브랜치에서 수정하는 것이 아니라 새로운 브랜치를 생성하여 수정
  • merge 기능을 통해 브랜치간 차이점을 비교하고 통합을 하게 된다.

git flow

  • Git Flow는 Git으로 형상관리를 할 때 브랜치를 효율적으로 관리하기 위해 사용하는 브랜치 관리 전략이다.
  • git flow에서 사용하는 branch의 종류
    • master : 제품으로 출시될 수 있는 브랜치
    • develop : 다음 출시 버전을 개발하는 브랜치
    • feature : 기능을 개발하는 브랜치
    • release : 이번 출시 버전을 준비하는 브랜치
    • hotfix : 출시 버전에서 발생한 버그를 수정 하는 브랜치

branch 생성

  • git branch : 현재 branch 확인
  • git branch 신규브랜치명 : 신규 branch 생성
  • git log : 만들어진 브랜치 확인, 현재 작업 중인 Head 브랜치 확인
  • git checkout 이동할브랜치명 : 브랜치 이동

branch 병합

두 개의 브랜치가 서로 다른 파일을 작업 한 경우 병합

  • Merge 명령어로 작업 (충돌없음)
  • 병합의 주체가 마스터 브랜치이기 때문에 현재 HEAD가 마스터 브랜치를 가리키고 있는지 확인

서로 같은 파일 내 다른 위치를 수정했을 때 병합

  • Merge 명령어로 작업 (충돌없음)

서로 같은 파일 내 같은 위치를 수정했을 때 병합

  • Conflict(충돌) 발생 -> Merge 작업 중단, 해당 내용을 직접 수정한 후 다시 merge 실행
  • 개발 수행시에 업무 영역을 최대한 잘 정의하여 브랜치 merge해야함

branch 병합 원리

fast-forward merge

  • 신규 브랜치를 생성한 후 master branch에 변화가 없는 경우
  • fast-forward 관계에 있는 브랜치에서 git merge 명령을 입력하면 새로운 commit이 생기지 않음
  • 이전 브랜치의 참조 객체가 앞서있는 브랜치가 가리키는 개체를 참조하도록 이동

3-way merge

  • 공통 부모를 가리키는 커밋을 중심으로 merge 커밋이 생성되는 방식을 3-way merge라고 한다.
  • Master에도 변경 사항이 생기고, 특정 Branch에도 변경사항이 생겼을 때 병합하면 Merge Commit이 생기면서 양쪽 변경점을 모두 포함한 상태로 Merge가 된다.

rebase

  • 공통 base(조상)를 가진 두 branch에서 하나의 branch 의 base를 다른 branch 의 최신 Commit을
    base로 하게끔 재정렬 하는 것을 의미
  • 병합의 명령어라기 보다는 브랜치의 commit을 정리하는 명령어
  • merge 에 비해 commit log 를 깔끔하게 관리 할 수 있음
  • Merge는 branch를 통합하는 것이고, Rebase는 branch의 base를 옮 긴다는 개념의 차이

branch 관리

branch 삭제

  • 병합된 branch 삭제할 때는 git branch –d branch-name 명령을 통해 삭제가 가능하다.
  • 병합되지 않은 branch를 삭제할 때는 git branch –D branch-name 으로 삭제가 가능하다.

'개발환경' 카테고리의 다른 글

Git Tag  (0) 2024.06.08
설치형 eXERD v3 SVN 플러그인 설치  (0) 2024.03.27
서버단에 프로그램 올리기  (0) 2022.11.17

+ Recent posts