[Git] Ch.6 Git Branch

Hwichan Ji·2021년 3월 13일
0

Git

목록 보기
7/8
post-thumbnail

팀 개발을 위한 Git, GitHub 시작하기(정호영, 진유림 지음)으로 공부한 내용을 정리한 글입니다.

Git Branch

Commit tree

  • 커밋 히스토리는 각 커밋들이 부모 커밋(base commit)을 가리키고 있는 트리 그림으로 표현할 수 있음
  • 실제로 커밋을 하면 커밋 객체가 생성되는데, 이 커밋 객체에는 부모 커밋에 대한 참조와 실제 커밋을 구성하는 파일 객체가 들어 있음
  • 부모 커밋은 자식 커밋에 대한 정보를 담고 있지 않음

Branch

  • 개념적으로 branch는 특정 커밋과 그 조상들을 지칭
  • 실제로 branch는 단순히 커밋 객체 하나를 가리키는 포인터

Branch 사용 이유

  • 새로운 기능 추가 (feature branch)
  • 버그 수정 (hotFix branch 혹은 bugFix branch)
  • mergerebase 테스트
  • 이전 코드 개선
  • 기본적으로 현재 작업 중인 branch의 최근 커밋을 가리키는 포인터
  • detached HEAD: checkout 등에 의해 branch의 최근 커밋이 아닌 다른 커밋을 가리키는 헤드
  • HEAD~<숫자>: HEAD~는 헤드의 부모, HEAD~n은 헤드의 n번째 조상을 의미
  • HEAD^<숫자>: HEAD^는 헤드의 부모, HEAD^n은 헤드의 n번째 부모를 의미. 병합 커밋처럼 부모가 둘 이상인 커밋에서만 의미가 있음

Tag

$git tag -a -m <message> <tag> [branch or checksum]
  • -a: 주석이 있는 태그 생성 옵션
  • branchchecksum을 생략하면 헤드에 태그 생성

3-Way Merge

  • 위 그림처럼 feature branch를 생성하여 다른 작업을 수행하던 중, 이전에 완료한 커밋의 코드를 수정해야할 상황이 발생

  • 수정할 코드가 있는 커밋에서 hotFix branch를 생성하여 코드 수정

  • hotFix branchmaster branch에 병합
  • master branch의 최신 커밋을 basehotFix branch의 커밋을 생성했기 때문에 fast-forward 병합이 발생
  • 병합이 완료된 hotFix branch는 삭제함

  • 원래 작업을 수행 중이던 feature branch는 2번 커밋을 base로 작업 중이었기 때문에 4번 커밋을 병합해야 함
  • Conflict이 발생할 수 있으며 Confilct을 해결한 병합 커밋이 추가로 생성됨

3-Way Merge와 rebase 비교

3-Way Mergerebase
특징병합 커밋 생성현재 커밋들을 수정하면서 대상 브랜치 뒤에 재배치함
장점한 번만 충돌 발생추가 커밋이 생성되지 않아 히스토리가 깔끔함
단점추가 커밋이 생성됨여러 번 충돌이 발생할 수 있음
profile
안드로이드 개발자를 꿈꾸는 사람

0개의 댓글