[Git] Git Branch #3

4510 단어 git branchgitgit

소프트웨어를 개발할 때에 개발자들은 동일한 소스코드를 함께 공유하고 다루게 됩니다. 동일한 소스코드 위에서 어떤 개발자는 버그를 수정하기도 하고 또 다른 개발자는 새로운 기능을 만들어 내기도 하죠. 이와 같이 여러 사람이 동일한 소스코드를 기반으로 서로 다른 작업을 할 때에는 각각 서로 다른 버전의 코드가 만들어 질 수 밖에 없습니다.

이럴 때, 여러 개발자들이 동시에 다양한 작업을 할 수 있게 만들어 주는 기능이 바로 '브랜치(Branch)' 입니다. 각자 독립적인 작업 영역(저장소) 안에서 마음대로 소스코드를 변경할 수 있지요. 이렇게 분리된 작업 영역에서 변경된 내용은 나중에 원래의 버전과 비교해서 하나의 새로운 버전으로 만들어 낼 수 있습니다.

01 브랜치(Branch)란 ?

브랜치란 독립적으로 어떤 작업을 진행하기 위한 개념입니다. 필요에 의해 만들어지는 각각의 브랜치는 다른 브랜치의 영향을 받지 않기 때문에, 여러 작업을 동시에 진행할 수 있습니다.
또한 이렇게 만들어진 브랜치는 다른 브랜치와 병합(Merge)함으로써, 작업한 내용을 다시 새로운 하나의 브랜치로 모을 수 있습니다.

main 브랜치 (Default Branch)

저장소를 처음 만들면, Git은 바로 'main'라는 이름의 브랜치를 만들어 둡니다. 이 새로운 저장소에 새로운 파일을 추가 한다거나 추가한 파일의 내용을 변경하여 그 내용을 저장(커밋, Commit)하는 것은 모두 'main' 라는 이름의 브랜치를 통해 처리할 수 있는 일이 됩니다.

Git은 10월부터 새로 만들어지는 Repository 의 Default Branch를 master 에서 main 으로 변경하기로 했다.

'main'이 아닌 또 다른 새로운 브랜치를 만들어서 '이제부터 이 브랜치를 사용할거야!'라고 선언(체크아웃, checkout)하지 않는 이상, 이 때의 모든 작업은 'main' 브랜치에서 이루어 집니다.



02 브랜치 만들기

Git 에서는 작업에 따라 자유롭게 브랜치를 만들 수 있습니다. 그러나 이것을 효과적으로 관리하려면, 먼저 함께 작업할 팀원들과 어떠한 방식으로 브랜치를 만들고 통합할 것인지 미리 정해두는 것이 좋습니다. 예를 들어 새로운 브랜치를 만들 때에 브랜치 이름은 어떤 규칙으로 지을 것인지 또는 어떤 상황에서 브랜치를 만들 지, 어느 시점에 통합할 것인지 등등 규칙은 정하기 나름입니다.


새 브랜치 생성하기

  • Command
git branch [branchName]

Git의 브랜치는 커밋 사이를 가볍게 이동할 수 있는 어떤 포인터 같은 것이다. 기본적으로 Git은 main 브랜치를 만든다. 처음 커밋하면 이 main 브랜치가 생성된 커밋을 가리킨다. 이후 커밋을 만들면 main 브랜치는 자동으로 가장 마지막 커밋을 가리킨다.
여기서 새로운 브랜치를 하나 만들었을 때, 새로운 브랜치도 지금 작업하고 있던 마지막 커밋을 가리킨다.

지금 작업 중인 브랜치가 무엇인지 Git은 어떻게 파악할까?
다른 버전 관리 시스템과는 달리 Git은 HEAD 라는 특수한 포인터가 있다. 이 포인터는 지금 작업하는 로컬 브랜치를 가리킨다. 브랜치를 새로 만들었지만, Git은 아직 main 브랜치를 가리키고 있다.
git branch 명령은 브랜치를 만들기만 하고 브랜치를 옮기지 않는다.

  • HEAD : 현재 작업 중인 브랜치를 가리키는 HEAD

git log 명령에 --decorate 옵션을 사용하면 쉽게 브랜치가 어떤 커밋을 가리키는지도 확인할 수 있다.

# Example
f30ab (HEAD -> main, testing) add feature #32 - ability to add new formats to the central interface
34ac2 Fixed bug #1328 - stack overflow under certain conditions
98ca9 The initial commit of my project

maintesting 이라는 브랜치가 f30ab 커밋 옆에 위치하여 이런식으로 브랜치가 가리키는 커밋을 확인할 수 있다.


브랜치 이동하기

git checkout 명령으로 다른 브랜치로 이동할 수 있다.

  • Command
git checkout [branchName]
  • 브랜치 이동
$ git checkout testing

위 명령어를 입력하고 나면, HEADtesting 브랜치를 가리킨다.

브랜치의 이동은 끝났지만, 커밋을 새로 했을 경우 브랜치의 흐름을 알 수 있을 것이다.

다음은 새로운 커밋이다.

git commit -a -m 'made a change'

HEAD 가 가리키는 testing 브랜치가 새 커밋( 87ab2 )을 가리킨다.
현재 작업 branch는 testing 이다.
그리고 main 브랜치는 여전히 이전 커밋을 가리키고 있다.
여기서, 작업 branch를 main 으로 되돌아가보자.

git checkout main

위 명령을 통해, 작업 브랜치는 testing 에서 main 으로 바뀌었다.

main 브랜치가 가리키는 커밋을 HEAD 가 가리키게 하면서 작업 브랜치를 변경한다.



02 브랜치 병합하기

좋은 웹페이지 즐겨찾기