branch 는 왜 사용할까?
: Git에서 하나의 프로젝트는 여러 가지 버전으로 관리할 수 있다. 예를 들어 하나의 프로젝트를 '유/무료 버전, 배포/개발/테스트/긴급 버그 수정용 버전, 스마트폰/PC/TV 버전' 등 으로 나누어 관리할 수 있는데 이는 모두 Git에 branch 라는 개념이 있기 때문에 가능하다.
- git branch: 생성된 모든 브랜치 조회
- git branch [브랜치명]: 입력한 브랜치명으로 새로운 브랜치 생성
- git branch -d [브랜치명]: 해당 브랜치를 삭제
- git checkout [브랜치명]: 해당 브랜치로 이동
- git checkout -b [브랜치명]: 입력한 브랜치명으로 된 새로운 브랜치를 생성하여 해당 브랜치로 이동
- checkout: 다른 branch로 이동
- -b: branch 생성+이동
- git merge [브랜치명]: 현재 위치의 branch에 [브랜치명] branch 를 합침
- git merge --abort: 머지를 하다가 conflict가 발생했을 때, 일단은 머지 작업을 취소하고 이전 상태로 돌아감
!Conflict 발생 시, 해결 방법!
꼭 머지를 해야 하는 상황이라면 아래 방법으로 하는게 정석
1. 컨플릭트가 발생한 파일을 연다
2. 머지의 결과가 되어쓰면 하는 모습대로 코드를 수정
3. 커밋
OR
그러나 conflict 파일들이 너무 많거나 conflict를 최소화할 수 있는 방식으로 파일 수정 후 커밋한 다음에 머지하거나 좀 더 나중에 머지하고 싶을 때라면,
머지 작업 자체를 취소할 수도 있음
git merge --abort: 머지 작업 취소
premium 브랜치도 push 할 경우, 아래와 같은 에러가 발생한다.
premium 브랜치는 리모트 레포지토리에 처음 올리는 것이므로 --set-upstream 옵션을 작성해주어야 한다.
머지 커밋이란?
- 브랜치(branch): 커밋을 가리키는 존재(포인터)
- HEAD: 브랜치를 통해 커밋을 간접적으로 가리키는 존재(포인터)
- git checkout [커밋]: HEAD가 커밋을 직접 가리킴 (*Detached HEAD)
- git checkout [브랜치명]: HEAD가 브랜치를 가리킴
- ! HEAD가 커밋을 직접적으로 가리키게 할 수 있으며, 브랜치를 직접 가리키게 만들 수도 있다.
머지의 종류에는 크게 Fast-forward 머지, 3-way 머지 가 있다.
git reset vs git checkout
git reset | git checkout |
HEAD가 가리키던 브랜치가 다른 커밋을 가리키도록 한다 | HEAD 자체가 다른 커밋이나 브랜치를 가리키도록 한다 |
HEAD도 결국 간접적으로 다른 커밋을 가리키게 되는 효과가 생긴다 | 브랜치를 통하지 않고, 커밋을 직접적으로 가리키는 HEAD를 Detached HEAD라고 한다 |