본문 바로가기

Study/Git

[Git] 3장. 깃과 브랜치

브랜치

  • 버전 관리 시스템에서는 나무가 가지에서 새 줄기를 뻗듯이 여러 갈래로 퍼지는 데이터 흐름을 가리킨다.
  • 깃으로 버전 관리를 시작하면 기본적으로 'master'라는 브랜치가 만들어진다.
  • 새 브랜치를 만들면 기존에 저장한 파일을 master 브랜치에 그대로 유지하면서 기존 파일 내용을 수정하거나 새로운 기능을 구현한 파일을 만들 수 있다.
  • 새 브랜치에서 원하는 작업을 다 끝냈다면 새 브랜치에 있던 파일을 원래 master 브랜치에 합칠 수 있다.
  • 기본적으로 가장 최근의 커밋을 가리킨다.

 

분기

  • master 브랜치에서 뻗어 나오는 새 브랜치를 만드는 것을 '분기(branch)한다'고 한다.

 

병합

  • 분기했던 브랜치를 master 브랜치에 합치는 것을 '병합(merge)한다'고 한다.

 

HEAD

  • 현재 작업 트리(워킹 디렉터리)가 어떤 버전을 기반으로 작업 중인지를 가리키는 포인터다.
  • 기본적으로 master 브랜치를 가리킨다.

 

브랜치 확인

  • 현재 작업중인 브랜치를 확인한다.
$ git branch

 

새 브랜치 만들기

  • git branch 명령 다음에 만들려는 브랜치 이름을 적으면 새 브랜치를 만들 수 있다.
  • 브랜치가 만들어져도 화면에는 아무것도 나타나지 않는다.
  • 브랜치를 분기하기 전까지 mater 브랜치에 있던 커밋들이 새 브랜치에 복사된다.
$ git branch <새로 만들 브랜치 명>

 

브랜치 사이 이동하기

  • 새 브랜치를 만들었다고 자동으로 브랜치가 이동하지 않기 때문에 명령을 입력해줘야 한다.
$ git checkout <이동하고 싶은 브랜치 명>

 

새 브랜치에서 커밋하기

  • 브랜치를 이동하고 커밋하면 해당 브랜치에서 커밋된다.
  • 브랜치와 커밋의 관계를 보기쉽게 git log 명령에 --graph 옵션을 적용하면 수직선 '|'로 부모 커밋과 연결해준다.
  • 부모 커밋까지만 같고, 그 이후 브랜치마다 다른 커밋을 만들었다는 사실을 알 수 있다.
$ git log --oneline --branches --graph

 

브랜치 사이의 차이점 알아보기

  • 브랜치마다 커밋이 쌓여갈수록 차이점을 일일이 확인하기 어려워져서 명령어로 확인할 수 있다.
  • 아래의 명령은 브랜치1에는 없고 브랜치2에만 있는 커밋을 보여준다.
$ git log <브랜치 명1>..<브랜치 명2>

 

브랜치 병합하기

  • 브랜치를 병합할 때, Base가 되는 브랜치로 체크아웃한 후 아래의 명령으로 병합할 수 있다.
  • 명령을 실행하면 자동으로 편집기가 실행되면서 직접 커밋 메시지를 입력하지만, --no-edit 옵션으로 편집기를 실행하지 않고 깃의 기본 커밋 메시지를 사용할 수 있다.
$ git merge <가져올 브랜치 명>
$ git merge <가져올 브랜치 명> --no-edit
  • 서로 다른 파일을 병합할 경우, master에 파일이 추가된다.
  • 같은 문서의 다른 위치를 수정하고 병합할 경우, 수정 내용이 자연스럽게 하나의 파일에 합쳐진다. (깃의 엄청난 장점)
  • 같은 문서의 같은 위치를 수정하고 병합할 경우, 파일에 충돌(conflict)가 발생하고 문제는 사용자가 직접 해결해야한다. 파일에서 가로줄(=======)을 기준으로 각 브랜치에서 수정한 내용이 나뉘어 있어 충돌을 해결하기 용이하며, 표시하는 부분을 제거한 후 커밋하면 병합이 완료된다. (다시 merge할 필요가 없다.)

 

브랜치 삭제하기

  • master 브랜치 체크아웃으로 기본 브랜치에서 명령어를 작성한다.
  • master 브랜치에 병합하지 않은 브랜치를 삭제하면 오류가 난다. 단, -d 대신 -D를 사용해서 강제로 삭제할 수 있다.
$ git branch -d <삭제하려는 브랜치 명>

 

브랜치에서 checkout과 reset의 작동 원리

  • git checkout 명령을 사용하면 HEAD를 제어해서 브랜치를 이동할 수 있다.
  • git reset 명령을 사용하면 HEAD가 가리키고 있는 브랜치의 최신 커밋을 원하는 커밋으로 지정할 수 있다. 어떤 브랜치에 있는 커밋이든 지정할 수 있으며, 명령을 수행한 뒤 브랜치와 연결이 끊긴 커밋은 삭제된다.

 

수정 중인 파일 감추기 및 되돌리기

  • 파일을 수정하고 커밋하지 않은 상태에서 급하게 다른 파일을 커밋해야 할 경우 용이하다.
  • 감추려는 파일이 tracked 상태여야 한다.
$ git stash
$ git stash save (위와 동일)
  • 감춘 파일들은 stash 목록에서 확인할 수 있으며, 스택 방식으로 가장 최근에 보관한 것이 stash@{0}에 담긴다.
$ git stash list
  • 감춘 파일들을 꺼내와 계속 수정하거 커밋할 수 있다.
  • stash 목록에서 가장 최근 항목을 가져오고 stash list에서 삭제할 수 있다.
$ git stash pop
  • stash list는 유지하되, 가장 최근 항목을 가져올 수 있다.
$ git stash apply
  • stash list의 가장 최근 항목을 가져오지 않고 삭제할 수 있다.
$ git stash drop

'Study > Git' 카테고리의 다른 글

[Git] 5장. 깃허브로 협업하기  (0) 2021.05.27
[Git] 4장. 깃허브로 백업하기  (0) 2021.05.23
[Git] 2장. 깃으로 버전 관리하기  (0) 2021.05.18
[Git] 1장. 깃 시작하기  (0) 2021.05.17