Git을 이해해보자 - Branch
Branch?
SW개발을 하다보면 하나의 소스코드를 개발자들은 공유하고 다루게된다.
A개발자는 버그를 고치고, B개발자는 기능을 추가하기도 한다.
이렇듯 하나의 소스코드를 개발자들이 공유하게 되었을때,
각 개발자들은 소스코드를 복사하여 독립적인 소스코드를 만들고 그 영역에서 각자의 개발을 진행한다.
이렇게 독립적인 영역으로 개발하도록 지원 해주는 것이 Branch 이다.
<br>
<br>
Branch는 어떻게?
<br>
<br>
<img src="https://static.podo-dev.com/blogs/images/2019/07/10/origin/LJAPBU181224235501.PNG">
<br>
HEAD는 현재 작업하고 있는 branch를 가리킨다.
Git은 최초에 master branch를 기본으로 생성하고, master branch는 최신 commit을 가리킨다.
최신 commit은 이전 commit을 가리킨다.
본 이미지와 같이 README를 세번 변경하여, 3번의 커밋을 진행하였다
GIT GUI로 다음같이 시각화 하여 확인 할 수 있다.
<br>
<img src="https://static.podo-dev.com/blogs/images/2019/07/10/origin/RVBEKT181224235501.PNG" style="border-style:solid; border-width:1px">
<br>
<br>
<br>
여기서 새로운 Branch를 생성해보자.
git branch [branch이름]
<img src="https://static.podo-dev.com/blogs/images/2019/07/10/origin/IAKZZY181224235501.PNG">
<br>
<img src="https://static.podo-dev.com/blogs/images/2019/07/10/origin/TPAD6L181224235501.PNG" style="border-style:solid; border-width:1px">
<br>
새로 생성된 Branch도 Third Commit을 가리키고 있다.
새로 생성된 Branch는 기존에 작업중인 Branch와 같은 commit을 가리킨다.
또한 HEAD는 여전히 master를 가리키고있다.
그럼 HEAD가 devel branch를 가리키도록 해보자.
<br>
즉 devel branch로 이동해보자.
git checkout [branch이름]
<img src="https://static.podo-dev.com/blogs/images/2019/07/10/origin/OXVONL181224235501.PNG">
<br>
<img src="https://static.podo-dev.com/blogs/images/2019/07/10/origin/6BAXB4181224235502.PNG" style="border-style:solid; border-width:1px">
<br>
HEAD가 devel branch를 가리키게 하였고,
현재 branch는 devel로 변경되었다.
여기서 README.MD의 내용을 다음과같이 변경하고 commit을 진행하였다.
<br>
README.MD
first
Second
Thrid
Forth
<img src="https://static.podo-dev.com/blogs/images/2019/07/10/origin/OTQKEQ181224235502.PNG" style="border-style:solid; border-width:1px">
<br>
devel branch는 Forth Commit을 가리키고
master branch는 Third commit을 가리킨다.
그럼 다시 HEAD가 master branch를 가리키게해보자.
<br>
README.MD
first
Second
Thrid
<img src="https://static.podo-dev.com/blogs/images/2019/07/10/origin/QTQVO2181224235502.PNG" style="border-style:solid; border-width:1px">
<br>
HEAD는 master branch를 가리키고, master branch는 Third Commit을 가리키고 있다.
따라서 README.MD 파일은 Third Commit 상태일때 데이터로 변경되었다.
<br>
그럼 이제 Merge를 진행해보자
Merge는 Branch를 합치는 것을 말한다.
각각의 Branch로 A개발자는 버그를 고치고, B개발자는 기능을 추가하였으면,
작업이 완료되었을때 두 branch를 합쳐야 할것이다. 이것이 Merge이다.
Merge는 두 가지로 구분한다.
<br>
<img src="https://static.podo-dev.com/blogs/images/2019/07/10/origin/BJH0V1181224235502.PNG" style="width:500px">
<br>
<br>
-
Fast-forwad Merge : Master branch만 이동하면된다
-
3-way Meger : 두 branch를 Merge하고, 새로운 commit을 만든다.
만약 두 branch 사이에 충돌이 발생하면, Merge가 실패하고 충돌부분을 공지한다.
충돌한 부분에대해서는 개발자가 수정하여 다시 Merge한다.
현재는Fast-forward Merge를 진행한다.
git merge [branch이름]
<img src="https://static.podo-dev.com/blogs/images/2019/07/10/origin/G496NW181224235502.PNG">
<img src="https://static.podo-dev.com/blogs/images/2019/07/10/origin/FC1ZIK181224235502.PNG" style="border-style:solid; border-width:1px">
<br>
Merge를 진행하였고, master branch의 이동으로 간단하게 완료되었다.
다음으로 3-way merge를 진행하기 위해 다음과 같이 Commit 하였다. 또한 충돌이 발생하도록 하였다.
<br>
Fifth Commit의 README.MD
first
Second
Thrid
Forth
Fifth
Sixth Commit의 README.MD
first
Second
Thrid
Forth
Sixth
<img src="https://static.podo-dev.com/blogs/images/2019/07/10/origin/GLQKI3181224235502.PNG" style="border-style:solid; border-width:1px">
<br>
devel branch와 master branch를 Merge한다면
README.MD에 내용이 서로 상이하여, 충돌이 발생할 것이다.
Merge를 진행해보자.
<img src="https://static.podo-dev.com/blogs/images/2019/07/10/origin/0SHIDO181224235502.PNG">
<img src="https://static.podo-dev.com/blogs/images/2019/07/10/origin/T4CGZH181224235502.PNG" style="border-style:solid; border-width:1px">
<br>
<br>
충돌로 인하여 merge에 실패하였다.
파일들의 상태를 조회하니 README.MD가 충돌함을 확인 할 수 있다.
<br>
<img src="https://static.podo-dev.com/blogs/images/2019/07/10/origin/D1IURQ181224235502.PNG">
<br>
<br>
README.MD의 내용이 다음과 같이 변경되었다. 충돌 부분을 명시해준다.
first
Second
Thrid
Forth
<<<<<<< HEAD
Fifth
=======
Sixth
>>>>>>> devel
<br data-tomark-pass />
<br>
<br>
<br>
개발자는 충돌부분을 해결하고 다시 Commit을 해줌으로써, 해당내용을 해결 할 수있다.
다음과 같이 수정해주고, Commit 하였다.
<br>
README.MD
first
Second
Thrid
Forth
Fifth
Sixth
<br data-tomark-pass />
<img src="https://static.podo-dev.com/blogs/images/2019/07/10/origin/B6WEPR181224235503.PNG">
<br>
<img src="https://static.podo-dev.com/blogs/images/2019/07/10/origin/D7G0PS181224235503.PNG" style="border-style:solid; border-width:1px">
<br>
Merge 완료.✌️
<br>
<br>
<br>
<br>