Git의 branch에 대해 알아보자.
main
혹은 master
로 표시되는 것을 확인할 수 있다.포인터
같은 것이다.branch
이다.commit
하면 Git은 현재 Staging Area에 있는 데이터의 스냅샷에 대한 포인터, 저자나 커밋 메시지 같은 메타데이터, 이전 커밋에 대한 포인터 등을 포함하는 커밋 개체(커밋 Object)를 저장하게 된다.blob, tree, commit?
- blob: 파일을 Stage했을 때 Git 저장소에 파일을 저장하는 것
- tree: 파일과 디렉토리 구조가 들어 있는 개체
- commit: 메타데이터와 루트 트리를 가리키는 포인터가 담긴 개체
master, main?
- Repository 생성 시 기본 default branch는
master
이 아니라main
이다.- 기존 default branch 생성 시 기본 이름은
master
였지만, 'Black Lives Matter' 운동에 따라 주인과 노예관계를 뜻하는master
,slave
를 다른 단어로 대체하기 위해서main
을 사용하는 추세이다.- 만약 기본 branch 이름이
master
라면, 아래 코드를 통해main
으로 변경이 가능하다.# 변경 코드 git branch -M main
- 기본 브랜치 이름 설정 바꾸기
- 아래 링크에서 기본 브랜치명을 변경할 수도 있다.
- https://github.com/settings/repositories
- 만약 local에 저장소를 clone한 경우 다음과 같이 기본 저장소 이름을 바꿔줘야 한다.
git branch -m master main git fetch origin git branch -u origin/main main
git branch [브랜치명]
git branch mynewbranch
git branch
로 생성된 branch 확인git branch
git branch
*
가 있는 곳이 현재 내가 위치한 branch 이다.HEAD
라는 특수한 포인터가 존재하며, 이 포인터는 현재 작업하고 있는 로컬 브랜치를 가리킨다.git branch
명령은 브랜치를 만들기만 하고 브랜치를 옮겨주지는 않기 때문에, 새로운 브랜치를 생성하더라도 Git은 아직 main
브랜치를 가리키게 된다.git log --oneline --decorate
를 활용해 브랜치가 어떤 커밋을 가리키고 있는지 확인할 수 있다.git log --oneline --decorate
git checkout 브랜치명
명령어를 사용하면 다른 브랜치로 이동할 수 있다.git checkout 브랜치명
git checkout mynewbranch
# 이렇게 하면 HEAD는 mynewbranch 브랜치를 가리킨다.
git commit -a -m 'made a change'
# 커밋명 'made a change'
mynewbranch
브랜치는 새로운 커밋 개체를 가리키게 된다.main
브랜치로 되돌아가보자.git checkout master
HEAD
는 다시 main
브랜치를 가리키게 되었다.main
브랜치가 가리키는 커밋을 HEAD
가 가리키게 하고, 워킹 디렉토리의 파일도 그 시점으로 되돌려 놓은 것.mynewbranch
브랜치에서 임시로 작업하고 원래 main
브랜치로 돌아와서 하던 일을 계속할 수 있다는 의미이다.기억해두기!
- 브랜치를 이동하면 워킹 디렉토리의 파일이 변경된다.
- 이전에 작업했던 브랜치로 이동하면 워킹 디렉토리의 파일은 그 브랜치에서 가장 마지막으로 했던 작업 내용으로 변경된다.
- 만약 파일 변경시 문제가 있어 브랜치를 이동시키는게 불가능한 경우 Git은 브랜치 이동 명령을 수행하지 않는다.
git merge [브랜치명]
mynewbranch
브랜치의 내용이 main
브랜치에 통합(merge) 되었기에 더 이상 필요없게 된 경우 아래 명령어를 이용해 mynewbranch
브랜치를 삭제할 수 있다.git branch -d [브랜치명]
git branch -d mynewbranch
git branch
로 남아있는 branch 목록을 확인할 수 있다.git branch
참고자료