포스트

차원 넘나들기

차원 넘나들기

branch

생성

1
git branch branch_name

삭제

1
git branch -d branch_name
  • 강제 삭제는 -D

조회

1
git branch

switch

  • 브랜치간 이동
  • checkout에서 변경 됨
1
git switch branch_name

브랜치 생성과 이동을 동시에

1
git swich -c branch_name

merge

  • 두 브랜치를 한 커밋에 이어 붙임
  • 브랜치 사용 내역을 남길 필요가 있을 때 적합
1
git merge branch_name
  • main브랜치에 합칠려면 main 브랜치에서 합칠 브랜치 명을 적어주면 됨
  • 충돌이 있을 경우 해결 후 git add . -> git commit 하면 됨

예시

  • merge 전
1
2
3
A---B---C (main)
         \
          D---E (feature)
1
2
git switch main
git merge feature
  • merge 후
1
2
3
A---B---C-------F (main)
         \     /
          D---E 
  • merge 커밋이 하나 생김
  • feature에 대한 커밋 히스토리가 남음
  • D, E의 최종 상태를 한 번에 합치는 것이기 때문에 충돌은 한 번만 해결하면 됨

rebase

  • 한 줄로 깔끔히 정리된 내역을 유지하기 원할 때 적합
  • 이미 팀원과 공유된 커밋들에 대해서는 사용하지 않는 것이 좋음
1
git rebase branch_name
  • main 브랜치를 rebase하려면 다른 브랜치에서 git rebase main 하면 됨
  • 이후 main 브랜치도 해당 브랜치를 merge하여 최신 커밋으로 맞춰 주면 됨

예시

  • rebase 전
1
2
3
A---B---C (main)
         \
          D---E (feature)
1
2
git switch feature
git rebase main
  • rebase 후
1
A---B---C'---D---E' (feature)
  • feature에 대한 히스토리가 남지 않고 이어 붙여짐
  • 따라서 D, E에 충돌이 2번 나면 2번 다 해결해야 함

merge vs rebase 요약

구분git mergegit rebase
개념두 브랜치를 병합하여 새로운 병합을 만듦한 브랜치의 커밋들을 다른 브랜치 위로 재배치 함
커밋 히스토리병합 커밋이 생기며 분기 형태로 남음히스토라ㅣ가 직선으로 정리 됨
기록 보존원래의 브랜치 구조를 그대로 보존기본 커밋의 SHA가 바뀜(새 커밋으로 다시 작성됨)
충돌 발생 시병합 시점에 한 번에 해결각 커밋마다 충돌을 해결해야 함
협업 시 권장 여부이미 공유된 브랜치에서 안전하게 사용 가능공유된 브랜치에서는 사용 비권장(히스토리 꼬일 수 있음)
장점히스토리를 손대지 않아 안전함깔끔한 직선 히스토리 유지 가능
단점커밋 그래프가 복잡해짐충돌 처리 많고, 잘못 쓰면 협업 브랜치 망가질 수 있음
사용 추천 상황협업 중인 원격 브랜치 병합 시개인 브랜치 정리 후 병합 전에 정리 할 때

참고

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.