프로젝트를 독립적으로 관리하는데 사용한다. 버그 수정과 새로운 기능을 구현할 때마다 작업 폴더를 복사하는 것은 프로젝트를 유지 관리하는 측면에서 좋지 않기 때문에 기존 코드와 분리해서 작업할 수 있는 브랜치를 사용한다.
$ git branch 브랜치이름 커밋 ID
-
)로 시작할 수 없다..
)로 시작할 수 없다...
)를 포함할 수 없다.~
), 캐럿(^
), 물음표(?
), 별표(*
), 대괄호([]
) 등은 포함할 수 없다.$ git add branch.html // 추적 등록
$ git commit -m "first" // 커밋 작성
[master (root-commit) cc66412] first
1 file changed, 1 insertion(+)
create mode 100913 branch.html
$ git branch footer // 브랜치 생성
$ git branch
footer // 생성된 브랜치
* master // 현재 브랜치
$ git branch -m 원래브랜치이름 새로운브랜치이름
$ git branch
* feature
footer
master
별표(*
)는 현재 선택된 브랜치를 의미한다.
브랜치 해시 - rev-parse
-> 브랜치는 특정한 커밋의 해시 값을 가리킨다.rev-parse
명령어를 사용하면 현재 브랜치가 어떤 커밋 해시 값을 가리키는지 확인할 수 있다.
$ git log // 로그 확인
commit d329083250298fad8790ad0f98s (HEAD -> feature, master, footer)
Author: hanmihyeon <mh@mail.com>
Date: Fri Feb 11 10:07:02 2022 + 0900
first
$ git rev-parse footer
d329083250298fad8790ad0f98s // footer 브랜치의 커밋 해시
브랜치의 해시 값과 브랜치를 생성한 기준 커밋의 해시 값이 동일하다.
브랜치의 세부사항 확인
$ git branch -v
* feature d23222c first
footer d23222c first
master d23222c first
현재 브랜치를 떠나 새로운 브랜치로 들어간다.
$ git checkout 브랜치이름
$ git checkout - // 이전 브랜치로 이동
로그를 확인할 때 브랜치의 흐름도 보기 위해 --graph
명령어를 사용한다.
--graph --all
옵션을 사용하면 모든 로그를 출력한다.
$ git log --graph --all
$ git show-branch --more=10 // 출력될 커밋 개수 10개로 제한
마지막 커밋 : 깃은 마지막 커밋 정보를 기반으로 새로운 커밋을 생성한다. 마지막 커밋은 새로운 커밋의 부모 커밋. 시스템이 매번 커밋할 때마다 마지막 커밋 정보를 찾으면 부하가 발생하기 때문에, 마지막 커밋을 쉽게 확인할 수 있도록 특수한 포인터를 제공한다. HEAD
는 작업중인 브랜치의 마지막 커밋 ID를 가리키는 참조 포인터이다. 깃은 마지막 커밋을 가리키는 HEAD 포인터를 부모 커밋으로 대체하여 사용한다.
각각의 브랜치마다 마지막 커밋이 다르기 때문에 브랜치가 여러 개면 HEAD 포인터도 여러 개이다.
$ git checkout -b 브랜치이름
// 예시
$ git checkout -b hotfix
Switched to a new branch 'hotfix'
$ git branch -v // 브랜치 목록
feature d84755c first
footer d84755c first
* hotfix dcdb1c1 master working.. // 현재 브랜치
master dcdb1c1 master working.. // 브랜치 생성만 했기 때문에 같은 커밋 ID를 가리킴
브랜치 이름은 커밋 해시키와 동일하기 때문에 브랜치 이름 대신 커밋 해시키를 사용하여 체크아웃할 수 있다.
$ git checkout 커밋해시키
// 바로 이전 커밋으로 체크아웃 할 때
$ git checkout HEAD~1 // 현재의 한 단계 전
※ 커밋 해시키 또는 HEAD를 사용하여 과거의 커밋으로 체크아웃했을 때 다시 현재 시점으로 돌아와야 한다.
$ git chekcout - // 이전 브랜치로 이동
$ git checkout master // 특정 브랜치로 복귀
$ git push 원격저장소별칭 브랜치이름
// 예시
$ git push -u origin master // 선택한 브랜치(master)를 원격 서버(origin)로 전달한다
$ git push -u origin hotfix // hotfix 브랜치 전송
$ git push origin 브랜치이름:새로운브랜치
// 예시
$ git push -u origin feature:function
$ git branch -r
$ git branch -a
$ git branch -vv
$ git checkout --track origin/브랜치이름
// 예시
$ git checkout --track origin/fucntion
$ git checkout -b 새이름 origin/브랜치이름
$ git fetch // 브랜치 커밋 가져오기
From http://gitub.com/hanmihyeon/gitstudy06
* [new branch] aaa -> origin/aaa
$ git branch -r // 원격 브랜치 확인
origin/aaa
origin/function
origin/hotfix
origin/master
$ git checkout -b aaa origin/aaa // 브랜치 생성 및 이동
Switched to a new branch 'aaa'
Branch 'aaa' set up to track remote branch 'aaa' from 'origin'.
기존 브랜치를 업스트림으로 직접 설정할 수도 있다. 브랜치를 생성한 후 직접 트래킹 브랜치를 지정. 업스트림을 직접 설정하면 원격 저장소로 트래킹 브랜치가 설정된다.
*-u : --set-upstream-to의 약자로 기존 브랜치를 특정 원격 브랜치로 추적
$ git branch -u origin/브랜치이름
로컬 저장소의 브랜치를 원격 저장소로 전송하는 다른 방법
$ git merge 원격저장소별칭/브랜치이름
// 브랜치 병합하지 않고 테스트만 할 때
$ git checkout -b 임시브랜치이름 origin/브랜치이름
✅ 현재 자신이 있는 브랜치는 삭제할 수 없다!
// 일반적인 삭제 방법, 스테이지 상태가 깨끗할 때만 사용
$ git branch -d 브랜치이름
// 강제 삭제
$ git branch -D 브랜치이름
// 리모트 브랜치 삭제
$ git push origin --delete 리모트브랜치이름
😳 혹시 틀린 부분이 있다면 댓글 남겨주세요!