본문 바로가기

programmer/Git 사용법

쉬운 Git 사용법 - 4 (Branch(브랜치))

브랜치(branch)



15.



Branch는 나뭇가지, 지사, 분점이라는 뜻이죠. 그러면 Git에서 branch의 의미는 무엇일까요?

우리는 여러 사람과 함께 같은 프로젝트를 진행할 때가 많습니다. 그러면 개발자들은 동일한 소스코드를 함께 공유하고 다루게 되는데요. 그러면 동일한 버전의 프로그램을 한 사람은 버그를 수정하고, 한사람은 새로운 기능을 만들게 되면 각기 다른 버전의 코드가 만들어집니다. 즉, 같은 출발점을 가지고 시작했는데 다른 방향을 향해 나아가는 모습이 되는거죠.

.




enter image description here

enter image description here



위의 두 그림을 보면 이해가 더 쉬울 수 있습니다.



16.



시각적으로 보면 뭔가 이해가 더 잘 되지 않나요?

Git은 branch라는 기능을 통해 버전이 다른 방향으로 나아갈 수 있도록 해줍니다. 여러 개발자들이 동시에 다양한 작업을 할 수 있게 만들어주는 것이죠. 어차피 작업은 나의 독립적인 영역에서 하기 때문에 github에서 일단 기둥이 되는 파일을 받아와 마음대로 작업을 해도 그것을 다 각각의 버전으로 만들어준다는 것입니다. 이것이 branch라는 기능입니다. 다시 말해서, 각각 작업이 가능하며 서로 영향을 받지 않습니다.

또한, 어떤 실험을 하고 싶을 때 따로 버전을 만들어서 하다가 잘 안되면 그 부분만 나뭇가지 잘라내듯이 없애도 원래의 프로그램에는 전혀 영향이 없는 것이죠. 왜냐하면 애초에 가는 길이 달랐으니까요.



17.



그러면 이제 브랜치를 만들어보도록 하겠습니다.



enter image description here



위의 메뉴들 중에서 Branch를 누르면 위와 같은 창이 나타납니다. New Branch에 적당한 브랜치 이름을 입력해 줍니다. 저는 Branch1이라고 입력했습니다. 그리고 Create Branch를 누릅니다.

다음과 같은 화면을 만날 수 있습니다.



enter image description here



자 이제 새로운 브랜치가 생겼습니다. 나뭇가지가 한 방향으로만 나아가다가 두 갈래로 나눠질 준비를 한 것입니다. 왼쪽을 보면 Branchs에 master와 branch1이 보이실 겁니다. master가 기둥이 되는 것이고 branch는 하나의 나뭇가지가 되는 것 입니다.



18.



그러면 이제 master와 branch1을 다르게 작업을 해보도록 하겠습니다.



enter image description here



index.html파일을 조금 바꿨습니다.
그리고 commit을 하기 전에 중요한 것이 있는데요.



enter image description here



위 그림을 보면 branch1의 마크에는 조그맣게 체크 표시가 되어있는게 보이시나요? 이 상태에서 commit을 하면 branch1의 가지가 자라나면서 branch1의 코드만 수정이 됩니다. 그렇다면 master로 체크를 옮기려면 어떻게 하면 될까요? master를 더블클릭하시면 바꿀 수 있습니다.

저는 우선 branch1을 바꿔보겠습니다. 체크가 branch1에 되어있는 상태로 commit을 합니다.



enter image description here



뭔가 달라진게 보이시나요? 오른쪽의 목록에서 branch1이라는 네모박스가 혼자 올라가 있습니다.



19.



이번에는 master의 코드를 바꿔보겠습니다. 그러면 master를 더블클릭해서 체크를 옮겨야 합니다.
안그러면 index.html 파일이 branch1의 코드로 나타납니다.

master를 더블클릭하면 코드는 기존의 두 갈래로 갈라지기 전의 코드가 됩니다. 왜냐하면 그 곳이 출발점이고 master의 코드는 아직 바꾸지 않았기 때문이죠.


enter image description here


따라서 index.html은 이런 상태여야만 합니다. 궁금하신 분들은 branch1을 다시 더블클릭해서 체크를 옮기면 index.html이 우리가 수정한 것처럼 바뀌어 있을 것입니다.

index.html 파일을 바꿔보도록 합시다.



enter image description here



h1 태그를 추가하면서 내용은 master로 하였습니다.

그리고 commit을 해봅시다.



enter image description here



이제 어느정도 감이 오실거라고 생각합니다. 기둥에 해당하는 master라는 나뭇가지가 다른 방향으로 branch1과 다른 방향으로 나아가고 있습니다. push에 1이라고 나와있는 건 무엇일까요? 또 master라는 네모상자 옆에 1 ahead라고 나와있는 것은 무엇일까요?

그것의 의미는 기존에 원격 저장소에 master가 저장되어 있는데 지금 작업하고 있는 로컬 저장소에서 1번의 commit이 있으니까 원격저장소에 push해야 할 것이 있다고 알려주는 것 입니다. push는 기존에 하던 방법으로 하시면 됩니다.

그런데 push를 누르면 원래 master 행만 있었는데 branch1행이 추가된 것을 볼 수 있습니다.



enter image description here



우리가 로컬 저장소에서 branch를 새로 만들었기 때문에 그 것을 원격저장소에 올릴 것인지 아닌지 선택할 수 있는 것입니다. 그때 그때 다르겠죠. 왜냐하면 branch를 어떻게 할지 결정하는 것은 상황에 따라 다르거든요. 상황에 맞게 결정하시면 됩니다. 만약 branch1을 push를 하신다면 원격 저장소에도 두 갈래 길로 나아가게 됩니다. 저는 master만 push하도록 하겠습니다.



enter image description here



근데 보이시나요? origin/master라고 되어있는 네모박스가 3번째 줄에서 첫번째줄로 올라왔습니다. 이미 눈치채셨겠지만 origin/master는 바로 원격 저장소의 상태를 나타냅니다. 아까는 push하기 전이었으므로 3번째 줄에 있었으나 push를 해서 로컬 저장소에 있는 master와 같은 버전의 상태가 된 것이죠.



20.



다음 글에서는 Merge(합병)과 충돌에 대해서 알아보겠습니다.