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