1. 브랜치란

  • 브랜치(branch): 나뭇가지, 버전 관리 시스템 하에서는 여러 갈래로 퍼지는 데이터 흐름을 의미

1-1. 브랜치가 필요한 이유

[저장소마다 버전 관리를 따로 하는 경우]
image

➡ 비효율적인 관리 방식이다.

1-2. master 브랜치 vs main 브랜치

  • main 브랜치와 master 브랜치 모두 git 사용 시 기본이 되는 브랜치

1-3. 브랜치 기능 살펴보기

  • 사용자가 commit 할 때마다 main 브랜치는 어떤 게 최신 커밋인지 정보를 가져옴
    • 브랜치는 commit을 가리키는 포인터와 비슷
  • 새 브랜치 생성 시 기존 파일은 main에 유지하면서 새 브랜치에서 기존 파일 내용을 수정, 추가할 수 있음
  • 분기(branch): main 브랜치에서 새 브랜치를 만드는 것 image

  • 병합(merge): 분기했던 브랜치를 main 브랜치에 합치는 것 image

2. 브랜치 만들기 및 이동하기

2-1. 새 브랜치 만들기

  • git branch: 깃에서 브랜치를 만들거나 확인하는 명령
    • 새로 branch를 만드려면 명령 다음에 브랜치 이름을 적으면 됨
    • 현재 작업하는 브랜치 앞에 * 표시가 있음
  • git log 이해하기 image
    • 저장소에 mainapple이라는 2개의 브랜치가 있고, HEAD -> main이므로 현재 작업하는 브랜치는 main임

2-2. 새로운 commit 추가

image

  • 새로 만든 커밋은 현재 작업중인 branch에만 적용되고, 나머지 브랜치에는 적용되지 x
    cf> --oneline 옵션: 한 줄에 한 커밋씩 보여줄 때 사용

2-3. branch 전환하기

  • 전환: 현재 브랜치에서 다른 브랜치로 이동하는 것
  • git switch 명령어 사용
    • git wsitch 브랜치명

3. 브랜치 정보 확인하기

3-1. 전환한 브랜치에서 커밋하기

  • git add .: 현재 저장소에서 수정 내용이 있는 파일을 한꺼번에 올릴 수 있음

3-2. 브랜치와 커밋 관계 알아보기

  • git log 명령 사용 시 --branches 옵션을 추가하면 브랜치마다 최신 커밋을 한 눈에 확인 가능
  • 그래프 형태로 표현하기 image

    • 해석:
      • apple 브랜치의 최신 커밋은 apple work 4
      • work 3 커밋 다음에 apple 브랜치에 커밋이 생성됨

      • main 브랜치의 최신 커밋은 main work 4
      • 부모 커밋이 work 3 커밋임

3-3. 브랜치 사이의 차이점 살펴보기

  • git log 명령에서 브랜치 이름 사이에 ..을 넣는 명령을 통해 브랜치 간의 차이를 쉽게 확인할 수 있음
    • 마침표 왼쪽에 있는 브랜치를 기준으로 오른쪽 브랜치와 비교

4. 브랜치 병합하기

  • 브랜치 병합(branch merge): 브랜치 작업을 마무리하고 기존 브랜치와 합치는 경우

4-1. 서로 다른 파일 병합하기

  • 브랜치를 병합하기 전에 병합할 위치(branch)로 이동해야 함
    • git switch 브랜치명: 브랜치 이동
  • git merge 브랜치: 현재 작업 중인 branch에 해당 브랜치 병합
    • 자동으로 vim이 실행됨
    • 커밋 메시지 수젱/삭제 가능
  • 병합 과정 시각화 image

cf> 빨리 감기 병합

  • main 브랜치에서 브랜치를 분기한 후에 main 브랜치에 아무 변화가 없는 상황에서 브랜치를 병합하는 경우
  • 분기한 브랜치에서 만든 최신 커밋을 main 브랜치가 가리키게만 하면 됨
    • 화면에 커밋 해시가 업데이트되었다는 내용과 함께 fast-forward라는 메시지가 발생됨
    • git merge 명령으로 단순히 포인터만 이동시킴

4-2. 서로 다른 브랜치에서 한 문서의 다른 부분을 수정했을 때 병합하기

  • 같은 문서로 서로 다른 위치를 수정한 경우 자동으로 문서를 합쳐줌 image

4-3. 서로 다른 브랜치에서 한 문서의 같은 부분을 수정했을 때 병합하기

  • 깃에서는 줄 단위로 문서의 변경 여부를 확인
    • 서로 다른 브랜치에서 같은 줄을 수정했을 경우, 브랜치 병합 시 브랜치 충돌(conflict) 발생
  • 만일 파일을 여러 개 병합했다면 충돌이 발생한 파일 외에 다른 파일은 자동으로 병합됨
  • 충돌이 생긴 문서는 자동으로 병합될 수 없음
    • 사용자가 충돌 부분을 직접 해결한 후 커밋 image

- 병합 및 충돌 해결 프로그램

image

4-4. 병합이 끝난 브랜치 삭제하기

  • 브랜치 병합 후 더 이상 사용하지 않는 브랜치는 삭제 가능
    • 단, 완전히 지워지는 것은 아님
    • 같은 이름의 브랜치를 만들면 예전 내용을 다시 볼 수 있음
  • 브랜치 삭제의 경우 main 브랜치에서 진행해야 함
  • 브랜치 삭제 명령어: git branch -d 브랜치명

4-5. cherry-pick으로 병합하기

  • 브랜치의 특정 버전의 변경 사항만 선택적으로 합치려고 할 때 활용
    • 새로운 버전은 생성되지 않고 main 브랜치에서 합쳐짐
  • 병합될 브랜치로 이동 후 병합
    • 명령어: git cherry-pick 체리픽 할 해시

📚 Reference

Do it! 지옥에서 온 문서 관리자 깃&깃허브 입문(3장, p.90 ~ 135)