[Git] CLI로 브랜치 생성하기

2022. 4. 22. 12:55Git

1. branch 되돌아보기

  • 커밋을 수행하면 커밋 객체가 생성됩니다. 커밋 객체에는 부모 커밋에 대한 참조와 실제 커밋을 구성하는 파일 객체가 들어 있습니다.
  • 브랜치는 논리적으로는 어떤 커밋과 그 조상들을 묶어서 뜻하지만, 사실은 단순히 커밋 객체 하나를 가리킬 뿐입니다.

브랜치의 사용 시기

사용 시기 설명
새로운 기능 추가 가장 대표적으로 브랜치를 사용하는 경우입니다. [main] 브랜치에는 정상적으로 동작하는 안정적인 버전의 프로젝트가 저장되어 있기 때문에 새로운 기능을 추가할 때는 [main] 브랜치의 최신 커밋으로부터 브랜치를 생성해서 개발합니다. 이때는 개발, 코드 리뷰, 테스트까지 모두 완료해서 이상이 없으면 [main] 브랜치로 병합합니다.
버그 수정 오류와 버그는 놀랍지 않게도 항상 발생합니다. 버그가 발생하면 [main] 브랜치로부터 새로운 브랜치를 생성해서 작업합니다. 이때 브랜치 이름은 hotfix, bugfix 같은 이름을 사용합니다. 버그 수정이 끝나면 당연히 [main] 브랜치로 병합합니다. 이 경우, 이후에 새로 개발한 내용을 다시 [main] 브랜치에 병합할 때 버그 수정으로 인해 충돌이 생길 수 있기 때문에 주의해야 합니다.
병합과 리베이스 테스트 병합이나 리베이스는 입문자에게 가장 까다로운 일 중에 하나입니다. 물론 reset 명령을 이용해서 언제든지 취소할 수 있지만 그조차도 어려울 수 있습니다. 이럴때 임시 브랜치를 만들어서 병합과 리베이스를 테스트를 해보면 상당히 편리합니다. 잘못되었을 경우 그냥 브랜치를 삭제해 버리면 됩니다.
이전 코드 개선 이미 기능 구현은 완료되었는데, 코드가 마음에 들잊 않아서 함수의 로직 등을 개선하고 싶을때 사용합니다. 많은 사람이 이런 상황에 기존 코드를 주석 처리하고, 그 아래에 새로운 개선 코드를 작성하는데, 이 방법보다 브랜치 사용을 추천합니다. 새로 브랜치를 만들어 이전 코드는 과감하게 삭제하고 새 코드를 작성합니다. 다른 브랜치의 이전 커밋에는 잘 돌아가는 코드가 여전히 남아있기 때문에 부담이 없습니다.
특정 커밋으로 돌아가고 싶을때 이미 저장되어 있는 특정 커밋으로 돌아가고 싶을 때 일반적으로 hard reset이나 revert를 사용합니다. 그런데 효과적인 방법으로 브랜치를 생성하는 방법이 있습니다. hard reset의 경우 커밋이 없어질 수 있기 때문에 추천하지 않고, revert는 사용이 조금 까다롭습니다. 이 경우 브랜치를 새로 만들어서 작업을 하고, 이후 리베이스나 병합을 사용하는 것이 좋습니다.

 

2. branch 생성하기

명령어 구성 설명
git branch [-v] 로컬 저장소의 브랜치 목록을 보여주는 명령어

-v 옵션 사용시 마지막 커밋도 함께 표시됨

표시된 브랜치 중에서 이름 왼쪽에 *가 붙어 있으면 HEAD 브브랜치
git branch [-f] <브랜치이름> [커밋체크섬] 새로운 브랜치를 생성함

커밋체크섬을 주지 않으면 HEAD 브랜치로부터 브랜치 생성

이미 존재하는 브랜치를 다른 커밋으로 옮기고 싶을때는 -f 옵션 사용
git branch -r[v] 원격 저장소에 있는 브랜치를 보고 싶을 때 사용함

-v 옵션을 사용하여 커밋 요약을 볼 수 있음
git checkout <브랜치이름> 특정 브랜치로 이동할때 사용됨

브랜치 이름 대신 커밋체크섬을 사용할 수 있음

하지만 브랜치 이름을 사용하는 것을 권장함
git checkout -b <브랜치이름> <커밋 체크섬> 특정 커밋에서 브랜치를 새로 생성하고 동시에 해당 브랜치로 이동함

두 명령을 하나로 합친 것이기 때문에 간결함
git merge <대상 브랜치> 현재 브랜치와 대상 브랜치를 병합할때 사용함

병합 커밋이 새로 생기는 경우가 많음
git rebase <대상 브랜치> 내 브랜치의 커밋들을 대상 브랜치에 재배치시킴

히스토리가 깔끔해져서 자주 사용하지만 조심해야함
git branch -d <브랜치 이름> 특정 브랜치 삭제

HEAD 브랜치나 병합이 되지 않은 브랜치는 삭제할 수 없음
git branch -D <브랜치이름> 브랜치 강제 삭제

-d로 삭제할 수 없는 브랜치를 삭제하고 싶을때 사용함

 

브랜치 만들기

(main) $ git branch # 현재 브랜치 확인

(main) $ git branch feat/c # 새로운 브랜치 생성

(main) $ git branch # 현재 브랜치 확인

(main) $ git log --oneline -all # 변경된 브랜치 확인

 

HEAD에 대해 기억할점

  1. HEAD는 현재 작업중인 브랜치를 가리킴
  2. 브랜치는 커밋을 가리키므로 HEAD도 커밋을 가리킴
  3. 결국 HEAD는 현재 작업중인 브랜치의 최근 커밋을 가리킴

 

References

source code : https://github.com/yonghwankim-dev/git_study
팀 개발을 위한 Git Github 시작하기, 정호영 진유림 저

'Git' 카테고리의 다른 글

[Git] CLI로 3-way 병합하기  (0) 2022.04.22
[Git] CLI로 checkout 하기  (0) 2022.04.22
[Git] 원격저장소 관련 CLI 명령어  (0) 2022.04.22
[Git] Git 기본 CLI 명령어  (0) 2022.04.22
[Git] Git Bash 명령어  (0) 2022.04.22