브랜치
브랜치란 독립적으로 어떤 작업을 진행하기 위한 개념이다. 브랜치는 다른 브랜치에 영향을 받지 않으므로 프로젝트에서 협업할때 코드가 변경될 우려없이 독립적으로 개발할 수 있다.
분기와 병합
깃으로 버전관리를 시작하면 기본적으로 master 또는 main이라는 브랜치가 만들어진다. 사용자가 커밋할때마다 master 브랜치는 최신 커밋을 가리킨다. 즉, 브랜치는 커밋을 가리키는 포인터와 비슷하다고 생각할 수 있다. 새 브랜치를 만들면 기존에 저장한 파일을 master 브랜치에 그대로 유지하면서 기존 파일 내용을 수정하거나 새로운 기능을 구현할 파일을 만들 수 있다. 이렇게 master 브랜치에서 뻗어나오는 새 브랜치를 만드는 것을 '분기(branch)'한다고 한다.
새 브랜치에서 원하는 작업을 다 끝냈다면, 새 브랜치에 있던 파일을 원래 master 또는 main 브랜치에 합칠 수 있다. 이렇게 분기했던 브랜치를 합치는 것을 '병합(merge)'한다고 한다.
A 브랜치에 B 브랜치를 머지시키기 전에 A 브랜치에 추가적인 커밋이 없다면 브랜치가 분기될 필요가 없으므로 fast-forward 방식으로 병합된다.
즉, 별도의 커밋을 생성하지 않고 A 브랜치가 가리키는 커밋을 B 브랜치가 생성한 커밋으로 바꾸는 작업이다.
만약 A 브랜치에 B 브랜치를 머지시키기 전에 A 브랜치에 추가적인 커밋이 있었다면, merge commit 방식으로 병합된다.
branch의 base를 이동시킨다는 뜻으로, 머지처럼 브랜치 통합을 목적으로 하지만, 특정 시점으로 브랜치가 가리키는 곳을 변경하는 기능을 한다.
rebase를 활용하면 git history를 깔끔하게 정리할 수 있다.
브랜치 명령어
//새로운 브랜치 생성
git branch `새로운 브랜치 이름`
//새로운 브랜치 생성 후 해당 브랜치로 전환
git switch -c `새로운 브랜치 이름`
git checkout -b `새로운 브랜치 이름`
//브랜치 목록 확인
git branch
//브랜치 목록과 각 브랜치의 최근 커밋 확인
git branch -v
//브랜치 삭제
git branch -d `삭제할 브랜치 이름`
git branch -D --> 해당 명령어는 병합하지 않은 브랜치를 강제 삭제하는 방법
//브랜치 전환
git switch `브랜치 이름`
git checkout `브랜치 이름`
//브랜치 병합
master 브랜치로 dev 브랜치를 병합할때 (master <- dev)
1. git checkout master
2. git merge dev
//로그에 모든 브랜치를 그래프로 표현
git log --branches --graph --decorate
//아직 commit하지 않은 작업을 스택에 임시로 저장
git stash