Git

3. Git 프로젝트관리 (branch)

문정훈 2021. 10. 2. 14:42

1. branch 뜻

프로젝트를 개발할때 코드를 여러개로 복사해야할 일이 생긴다. 코드를 복제하면 (새로운 branch)원래의 코드(master branch)와는 독립적으로 개발을 할 수 있다. 

 

여러 개발자가 공동으로 프로젝트를 진행하는 경우 개발자 별로 역할이 다 다르다. 자신의 branch를 가지고 개발을 한 뒤 master branch에서 이를 반영하도록 하는 방법을 제공한다. 


 

2. branch 만들기

git branch <name>
git checkout <이동할 branch 이름>

▶exp 브랜치 사용해보기

git branch 명령어를 치면 해당 프로젝트의 branch이름을 알려주고 현재 branch를 알려준다. 

git branch exp 명령을 주면 이 명령을 한 branch를 copy해서 새로운 “exp”라는 이름의 branch를 만드는 것이다. 

또한 두번째 명령을 통해 branch를 변경할 수 있다.

 

▶ exp 브랜치에서 파일 수정해보기

exp branch로 checkout 한 뒤 파일의 내용을 수정 한 뒤 commit 하면 해당 브랜치의 새로운 commit이 생성되는데 이 버전은 다른 branch(master)에 영향을 주지 않는다. 


 

3. branch 정보 확인1

git log --banches --decorate --graph
git log --branches --decorate --graph --oneline
git log main..exp
git log exp..main

▶git log --banches --decorate --graph

mian에서 버전 1 2 를 만들고 exp에서 3 4를 만들고 다시 main에서 5를 만든 상황이다.

mian1->2->5가 브랜치가 되고 exp1->2->3->4 브랜치가 된다.

 

 

▶ git log --branches --decorate --graph --oneline

 

 git log main..exp

main branch에는 없고 exp branch에는 존재하는 파일의 내용을 보여준다. 

 

 

 git log exp..main

exp branch에는 없고 main branch에는 존재하는 파일의 내용을 보여준다. 

-p 옵션을 추가하면 파일의 내용을 함께 보여준다.


 

5. branch 병합

git merge master exp

▶ 무엇을 병합하는 가?

위 상황은 우선 master 브랜치에서 1->2->5인것이고 exp 브랜치에서는 1->2->3->4인 상황인데 main에는 3->4 과정이 없고 exp에선 5의 과정이 없다. 이들을 병합하는 예시이다. 

 

git merge exp

main 브랜치에서 git merge exp 명령을 주면 mainexp 내용을 넣는것임.

명령을 주면 위와 같이 vi 창이 열리는데 :wq를 하면 병합이 완료된다.

 

▶ main 브랜치로 병합된 결과

위 코드를 보면 Merge branch ‘exp’ 문구는 commt 할 때 버전의 메시지이다. 즉 세로운 버전을 하나 더 만드는데 이제 병합되어 새로 생긴 버전은 아래와 같이 버전 3, 4를 일종에 상속으로 받게 된다.

 

정리하면 main 브랜치는 아래 같이 두 가지 버전의 branch를 가지게 되므로 모두 가졌다고 할 수 있다.

branch1) 1-2-5-‘Merge branch ’exp’ 버전의 branch가 되고

branch2) 1-2-5-3-4-‘Merge branch ’exp’

 


 

6. branch 충돌 문제와 해결

mani, exp 두 브랜치에 동일한 common.txt 파일 만들기

예를 들어 두 (main, exp) branch에 동일한 이름의 파일이 있는 상황에서 merge를 할때 branch 충돌이 일어날 수도 있고 안일어날 수도 있다. 

충동일 안일어나는 경우의 예와 충돌이 일어나는 예시를 차례대로 설명함. 

 

branch 충돌이 일어나지 않는 경우

처음 사진은 main branch의 f1.txt 의 내용이고 두번째 사진은 exp branch의 f1.txt 파일의 내용이다. 

두 파일은 중첩되는 내용이 없기 때문에 merge를 할 경우 아래 사진과 같이 정상적으로 merge가 된다. 

 

 

 

branch 충돌이 일어나는 경우

main, exp branch에 위 사진과 같이 각각 f1.txt 파일이 존재하는 상황이다. 위 상항을 보면 동일한 함수의 매개변수 이름이 서로 다르다. 이런 경우 branch merger를 하는 경우 충돌이 일어나게 된다. 만약 위와 같은 상황에서 merge를 하는 경우 아래와 같이 파일의 내용이 변경되며 merge를 하지 못한다. 

위 메시지를 분석하면 중간에 있는 ====는 구분자이고 <<<<< HEAD는 현제 브랜치 main의 내용이고 구분자를 기준으로 >>>>>> exp 까지는 exp의 내용이다.

이렇게 내용이 뜨는 이유는 개발자가 이걸보고 직접 문제를 해결하라는 의미가 된다. 우리는 이 정보를 바탕으로 병합 충돌의 문제를 해결하면 된다.

 

▶ branch 충돌 해결 방법

충돌이 일어난 뒤에 main의 f1.txt 파일의 내용을 위와 같이 수정하면 merge 충동 문제를 해결할 수 있다. 


 

7. branch 삭제

git branch –D <name>

위 명령으로 name이름을 가진 branch를 강제로 삭제할 수 있다. 

'Git' 카테고리의 다른 글

4. Github 프로젝트 관리 / remote, push, pull, clone  (0) 2021.10.02
2. Git 프로젝트 관리 (add, commit)  (0) 2021.10.02
1. Git & Github  (0) 2021.10.02