ETC/Git

Git 입문자 안내서 - 06 : 가지치기

Jade Choe 2024. 1. 8. 22:48
SMALL

앞선 포스팅에서 Git을 사용하는 이유로 협업의 용이성테스트를 들었다.

위 두가지 모두 가지치기가 필수라고 볼 수 있는데, 이번엔 가지치기에 대해 알아보도록 하자.

가지치기?

  • 영어로는 Branch라고 하며, git 명령어 또한 git branch로 사용한다.
  • 앞서 로컬 저장소를 만들었을 당시 디렉터리 뒤에 master라고 나와있던것을 기억하는가?
    그것이 바로 브랜치명이다.
    디렉터리명 뒤에 있는 민트색 master가 브랜치명이다.
  • 나무의 줄기(메인 브랜치)에서 별도의 가지(새 브랜치)를 작성, 메인 브랜치에 영향을 주지 않고 코드를 자유롭게 추가, 수정, 삭제가 가능하다.
  • 큰 가지에서 또 다른 갈래가 뻗어나가듯, 메인 브랜치가 아닌 다른 브랜치에서 분기가 가능하다.
  • 테스트가 완료되었다면 메인 브랜치에 병합해 실서버에 적용한다.

큰 나무 줄기(파란색)에서 뻗어나온 가지(자주색)와 가지에서 뻗어나온 또 다른 가지(연두색)

How to?

브랜치 생성

  • git branch [브랜치명]으로 생성한다.
  • git branch만 입력하면 브랜치의 목록과 현재 로컬 저장소가 바라보고 있는 브랜치를 볼 수 있다.
  •  브랜치는 '코드를 올려보자!' 포스팅에서 사용했던 --set-upstream 옵션으로 원격 저장소에 등록해 주어야 한다.

별표(*)가 있는 브랜치명이 현재 브랜치이다. git bash를 사용할 경우 디렉터리 뒤에도 표시된다.

 

메인 브랜치를 원격 저장소에 등록해주는 과정과 동일하다.

 

브랜치 이동

  • git checkout [브랜치명]으로 현재 브랜치에서 다른 브랜치로 넘어갈 수 있다.
  • git checkout -b [브랜치명]을 사용하면 브랜치를 새로 만든 후 바로 이동한다.
  • 새로 생성한 브랜치인 경우는 ModifiedUntracked 상태인 파일이 있다면
    이동한 브랜치에서 계속해서 작업이 가능하지만,
    기존에 존재하고있던 브랜치인 경우는 Modified 상태의 코드와
    해당 브랜치에 존재하던 코드가 충돌을 일으킬 경우 checkout이 불가능하다.

someBranch  브랜치의  README.md  파일 맨 아래줄에  문구를 한줄 추가해주고 체크아웃하면 방금 작성한 문구가 보이지 않는다.

 

 

someBranch의 README.md 파일과 main의 README.md 파일의 버전이 일치하지 않아 충돌이 일어난다.

 

  • 위와 같은 경우에는 main 브랜치의 Modified 파일을 커밋하거나, 원래대로 돌려놓은 후에
    someBranch 브랜치를 main브랜치로 병합해주어야 한다.
  • main 브랜치는 직접 수정하지 않고 별도의 브랜치에서 작업 후 main 브랜치에 병합하는 것이 안전하다.

 

브랜치 삭제

  • 작업이 끝난 뒤 병합 후 더이상 해당 브랜치가 필요없을 때나 잘못 만들었을 때는 -D/-d 옵션을 사용해 삭제할 수 있다.
  • git branch -D [브랜치명] : 메인 브랜치에 병합이 되었는지 여부에 상관 없이 무조건 삭제
  • git branch -d [브랜치명] : 메인 브랜치에 병합이 되었을 경우에만 삭제, 병합되지 않았다면 삭제하지 않음.
  • 파일을 수정/커밋 후 병합하지 않은 상태로 삭제되는 것을 방지하기 위해 -d 옵션을 사용하는 것을 권장한다.

 

브랜치 병합

  • A 브랜치를 main 브랜치에 병합하려면 git checkout A 를 사용해 A 브랜치로 이동 후 git merge main을 사용한다.
  • 병합 시 충돌이 나면 충돌을 해결하기 전까지는 commit/push를 할 수 없다.

 

 

git branch와 git checkout, git merge의 옵션은 다양하지만, 입문단계에서는 위 내용으로 사용해도 충분하며,

 

다 적기엔 너무 많기 때문에 링크의 포스팅으로 대체합니다.

 

BIG