Git_Branch

송민혁·2023년 9월 14일
0

Git

목록 보기
3/6
post-thumbnail

Repository...Commit... 그리고 Git Branch?!
깃이 우리를 편하게 만들어준다는데 이거 맞아요?! Linus님!!!

들어가기 전

Branch 란 나뭇가지를 의미한다. 이 비유적인 표현을 왜 썼을까에 대한 생각을 해야 한다.
한 프로젝트를 만들고 규모가 커지다 보면 여러 가지 버전이 생기기 마련이다.
예를 들어 (무료 버전 / 유료 버전), (개발 버전 / 배포 버전) 등 수많은 버전이 만들 일이 생긴다. 이를 위해서 깃은 우리에게 브랜치라는 기능은 할 수 있게 해줬다.

다시 말해, 메인 프로젝트를 손상시키지 않으면서 여러 버전을 관리하기 위해서 Git Branch를 사용한다. 마치 나무에서 브랜치가 생기고 썩은 가지를 잘라내지만 나무 자체가 변하지는 않듯이 말이다.

브랜치하나의 코드 관리 흐름와 같다.

브랜치독립적인 작업 영억이다,


용어

  • 마스터 브랜치 (Master Branch) - 레포지토리를 만들고 커밋을 하면 자동으로 생기는 브랜치 (기본 브랜치)
  • 통합 브랜치 (intergration Branch) : 배포할 수 있는 버전
  • 토픽 브랜치 (topic Branch) : 통합 브랜치가 아닌 브랜치이며 보통 버그를 수정하거나 새로운 기능을 추가해야 한다면 사용한다.
  • 체크 아웃 (checkout) : 다른 브랜치로 전환할 때 사용
  • 헤드 (HEAD) : 현재 사용 중인(현재 활성화된) 브랜치의 선두 부분
  • 머지 (Merge) : 여러 개의 브랜치를 하나로 모으는 기능
  • 리베이스 (Rebase) : 머지와 비슷할 수 있지만, 머지와 달리 정확한 이력을 남겨둬야 할 필요가 없을 경우 사용한다.

Branch 생성

아래 명령어를 실행하면 새로운 branch를 생성하게 된다.

$ git branch [브랜치명]

브랜치를 생성 후, 반드시 checkout을 해줘야 만들어놓은 해당 브랜치로 전환이되며
전환된 브랜치에서 작업이 수행된다.

주의사항
git add -A와 같은 옵션을 사용하게 되면 브랜치의 작업 내용이 모든 브랜치에 적용되게 된다.

Branch 삭제

아래 명령어를 사용하면 브랜치를 삭제할 수 있다.
단, 현재 HEAD 브랜치는 삭제할 수 없다.

$ git branch -d [삭제할 브랜치명]

-d: delete

다른 Branch로 이동

$ git checkout [브랜치명]

$ git switch [브랜치명] (체크아웃과 동일)

checkoutswitch의 차이점은
checkout의 경우 git switch 와 git restore 두 가지 역할을 모두 수행하는
반면 git switch 는 말 그대로 브랜치만 바꿀 때 사용한다고 보면 된다.

(git restore 란 파일이 modified 상태였던 것을 unmodified로 변경할 때 사용한다.
즉, 작업 트리를 복원할 때 사용한다)

checkout + branch 생성

$ git checkout -b [브랜치명]

b: branch

하나의 명령어로 브랜치를 만들고 바로 이동할 수 있다.

현재 브랜치 확인

$ git branch : 현재 브랜치 확인

$ git status : git 프로젝트의 상태(브랜치 포함)를 확인

여러 브랜치를 하나의 브랜치로 합치기

$ git merge [브랜치명]
현재 위치한 브랜치와 작성한 해당 브랜치와 합친다.

git rebase

또 다른 방법으로 rebase를 사용하는 것이다.

$ git rebase [합칠 브랜치명]

merge와 rebase 차이

둘의 차이는 merge를 했을 경우 병합된 HEAD branch에 merge commit이 추가되고 나누어진 branch가 그대로 유지된다.
반면에 rebase의 경우 별도의 commit이 추가되지 않으며 하나의 라인으로 브랜치가 통합되는 차이가 있습니다.

conflict 발생 시 merge 중단

$ git merge --abort

머지를 하다가 conflict가 발생했을 때, 일단은 머지 작업을 취소하고 이전 상태로 돌아감

conflict

주의사항
Merge시, 같은 파일 같은 라인에 수정을 한 두 브랜치를 병합하려면 Conflict가 발생하게 된다.

파일 둘 중 1개를 선택해서 다시 merge를 수행해주어야 하니,
되도록 같은 파일을 다른 브랜치가 작업하게 만드는 것은 지양해야 한다.

해결 방법
자신이 원하는 코드 내용을 작성하고 git add, git commit을 하면 된다.

Branch 이름 변경

HEAD branch 이름 변경

$ git branch -m [새로운 브랜치명]

HEAD branch가 아닌 다른 브랜치 이름 변경

$ git branch -m [바꿀 브랜치명][새로운 브랜치명]

Branch 비교

두 브랜치를 비교하고 싶으면 아래 명령어를 사용하면 된다.

$ git diff [브랜치명1][브랜치명2]

$ git diff [브랜치명1]..[브랜치명2] (두 브랜치 사이 확인)

HEAD와 Branch의 관계

헤드는 브랜치를 가리킴

헤드는 사실 커밋을 가리키는 게 아니라 특정 커밋을 가리키는 브랜치를 가리킨다!

HEAD -> Branch -> commit

체크아웃 시 헤드의 위치

다른 브랜치로 체크아웃을 하면 HEAD의 위치가 바뀌는 걸 확인할 수 있다.

머지 커밋

머지를 했을 때의 HEAD의 위치를 보면 현재 활성화중인 브랜치에 가리키는 걸 알 수 있다.


0개의 댓글