Branch 란 무엇인가 ❓
Branch(브랜치) : 원본을 수정하지 않고 안전하게 새로운 기능을 추가해볼 수 있도록 하는
프로젝트의 복사본
하나의 프로젝트에 여러명의 개발자들이 참가한다고 할때, 동일한 소스코드를 함께 공유하게 된다. 이때 동일한 소스코드를 가지고 어떤 개발자는 새로운 기능을 개발할 수 있고, 다른 개발자는 버그를 수정하기도 할 것이다.
여럼 사람이 동일한 소스 코드를 기반으로 서로 다른 작업을 할 경우 각각 다른 코드가 만들어 지는데, 이처럼 동시에 다양한 작업을 할 수 있고 만든 뒤에 하나로 모으기 위해 사용하는 기능이 Branch
이다.
Branch
를 이용하면 분리된 자기만의 독립적인 로컬 저장소에서 각자 작업을 한 다음
그 내용들을 하나로 모으는 것이 가능해진다.
그래서 보통 프로젝트를 시작할 때, 기본적인 메인 브랜치가 생성되고 프로젝트에 참가하는 개개인의 개발자들은 본인이 맡은 기능을 구현하기 위해 각자 Branch
를 생성하여 작업을 하고 작업한 내용을 메인 브랜치에 적용한다고 한다.
Branch
명령어 정리 ✏️
1) Branch 생성 : git branch [branch명]
2) Branch 목록 출력 : git branch -l
3) Branch 변경 : git checkout [변경할 branch명]
4) 생성된 Branch log 출력 : git log [--all] --graph
master branch
가 생성되는데, 위처럼 새로운 branch
를 생성하고 branch
를 변경해줬을때 변경된 것을 볼 수 있다. Git Branch 전략 ✅
: Git에서 Branch를 체계적으로 생성하고 관리하기 위한 일종의 규칙이다.
( 반드시 해야되는 건 아니나 우리는 프로젝트 시 이 규칙을 따르기로 했다. )
1) Master Branch : 제품으로 출시될 수 있는 브랜치로 배포 가능한 상태만을 관리
2) Develop Branch : 기능 개발을 위한 브랜치들을 병합하기 위해 사용
3) Feature Branch : 기능을 개발하는 브랜치로 작업이 완료되면 Develop Branch로 통합
4) Hotfix Branch : 배포한 버전에서 긴급하게 수정을 해야 할 경우 사용
Merge 란 무엇인가❓
Merge(병합) : git 에서 생성한 branch 를 하나로 합치는 과정을 말하는 것으로, 각각의
개발자들이 작업한 branch
가 있을때 이를 main branch
로 합치는
과정이라 보면 된다.
명령어 : git merge [branch 이름]
Merge의 3가지 방법 ✏️
1) 3-way-merge : 서로 다른 두 커밋을 가진 branch가 하나로 병합하는 과정에서
두 branch가 양쪽의 이력을 그대로 보존하고자 새로운 병합된 커밋을
만들면서 병합하는 방식
실습해보는 방법 💻
(1) 새로운 폴더를 생성한뒤 "git bash" 창을 열고 로컬 저장소를 생성해준다.
(2) 생성한 폴더에 "test01.txt" 파일을 생성하고 커밋해준다.
(3) 위의 Git Branch 전략을 따라해보기 위해 develop branch
를 생성한다.
(4) develop branch로 변경하여 회원가입 기능 branch
( git branch feature/signup
) 와 게시판 기능 branch
( git branch feature/storyboard
) 2개를 생성해준다.
(5) feature/signup branch
로 변경하여 "test02.txt" 파일을 생성한 뒤 커밋해준다.
(6) feature/storyboard branch
로 변경하여 "test03.txt" 파일을 생성한 뒤
커밋해준다.
(7) develop branch
로 변경하여 feature/signup branch
를 merge 해준다.
(8) 이어서, feature/storyboard branch
도 merge 해준다.
(9) git log --all --graph
를 입력하면 아래와 같이 branch가 형성된것을
볼 수 있다.
➡ branch 진행 과정을 살펴보면 : 최초 develop branch
에서 2개의 signup,
storyboard branch
를 생성하였을때는 2개의 branch가 모두 동일한
develop branch
로 부터 파생되었다.
➡ 하지만 develop branch
와 signup branch
를 merge 하는 순간 develop
branch
에는 signup branch
의 내용이 추가되기 때문에 기존에 storyboard
branch
가 파생된 develop branch
와 달라지게 된다.
➡ 따라서 병합된 develop branch
를 storyboard branch
와 다시 merge 할때
2개의 branch 가 서로 다른 커밋을 가지고 있기 때문에 "3-way-merge" 가 되어
하나의 새로운 병합된 커밋이 만들어지면서 merge 되는 것이다.
2) Fast-forward-merge : 한쪽 branch에서만 변경사항이 일어났고, 일어난 변경사항을
다른 branch로 병합하는 방식
실습해보는 방법 💻
(1) 새로운 폴더를 생성한뒤 "git bash" 창을 열고 로컬 저장소를 생성해준다.
(2) 생성한 폴더에 "test01.txt" 파일을 생성하고 커밋해준다.
(3) 위의 Git Branch 전략을 따라해보기 위해 develop branch
를 생성한다.
(4) develop branch로 변경하여 회원가입 기능 branch
( git branch feature/signup
) 를 생성해준다.
(5) feature/signup branch
로 전환하여 "test02.txt" 파일을 생성한 뒤 커밋해준다.
(5) develop branch
로 변경하여 feature/signup branch
와 merge 한다.
(6) develop branch
에서 게시판 기능 branch( git branch feature/storyboard
)
를 새로 생성해준다.
(6) feature/storyboard branch
로 변경하여 "test03.txt" 파일을 생성한 뒤
커밋해준다.
(7) develop branch
로 변경하여 feature/story branch
를 merge 해준다.
(8) 이어서, feature/storyboard branch
도 merge 해준다.
(9) git log --all --graph
를 입력하면 아래와 같이 branch가 형성된것을
볼 수 있다.
➡ branch 진행 과정을 살펴보면 : 최초 develop branch
에서 signup branch
를
생성한 뒤 파일 추가 후 develop branch
에서 merge 했을때는 develop
branch
에 signup branch
기능이 추가되면서 기존의 develop branch
가
변경되어 새로운 develop branch
가 형성된다.
➡ 다음으로, 변경된 develop branch
에서 storyboard branch
를 생성했을때
storyboard branch
는 변경된 develop branch
에서 파생되었기 때문에
"3-way-merge" 때와는 다르게 동일한 develop branch
로부터 생성된 것이다.
➡ 따라서 develop branch
에서 storyboard branch
를 merge 해주면 처음부터
쭉 한개의 branch 에서 변경사항이 일어났기 때문에 위와 같이 "git log" 를
출력했을때 일직선으로 출력되는 것이다.
3) Rebase and merge : 기존 branch의 base 를 옮기고 새로운 branch와 병합하는
방식으로 보통 git history를 깔끔하게 하고 싶을때 사용한다.
develop branch
를 생성한다.master branch
로 변경하여 회원가입 기능 branch를git branch feature/signup
) 생성한다.signup branch
의 base 는 master branch
인 상태이다.signup branch
에서 git rebase develop
를 해주면 signup branch
의master branch
➡ develop branch
로 변경되는 것을 볼 수 있다.이렇게 완성된 branch를 github로 push 해주면( git push -u origin [braanch명]
) 깃허브에 업로드 된다.
다음으로 github에 업로드 된 것을 불러오기 위한 명령어로는 2가지가 있다.
1) git pull origin [branch명]
: branch를 가져오고 자동으로 merge 까지 수행
2) git fetch origin [branch명]
: branch를 가져오는데 merge는 자동으로 하지 않고, 직접 확인 후 수동으로 진행 후 작업
Github 에서 merge 하는 방법 ✅
merge를 위 처럼 "git bash" 에서 수행할 수 있으나, Github 에서도 가능하다.
진행 절차 ✏️
1) github에서 새로운 repo 생성 및 원격 저장소 연결
2) develop branch
생성 후 파일 추가, 커밋 후 push
3) feature/signup branch
생성 후 파일 추가, 커밋 후 push
4) 그러면 아래와 같이 github 에 branch 들이 생성된 것을 볼 수 있는데, 여기서
develop branch
와 signup branch
를 merge 하기 위해 "Pull requests" 를
클릭한다.
5) 다음으로 아래와 같이 "Compare & pull request" 를 클릭한다.
6) 다음으로 아래와 같이 "title" , "Add a description" 을 작성 후 "Create pull request"를
클릭한다.
7) 마지막으로 "Merge pull request" 를 클릭 후 "Confirm merge" 를 클릭한다.
➡ 이때, 혹시나 merge 하는 것에 대한 의견이 있다면 "comment" 를 남기면 된다.8) 정상적으로 merge 를 성공하면 아래와 같은 화면을 볼 수 있다.
오늘의 느낀점 👀
오늘은 git 에서 branch
와 merge
에 대해 학습한 시간이었다. 회고 내용은 주로
"git bash" 에서 작업한 내용이지만, 실제로는 "Intellij" 를 이용하여 코딩하고 git 작업까지 다 한다고 하여 Intellij 에서 git 작업하는것 또한 병행하여 실습하였다.
본격적으로 프로젝트에 들어가기에 앞서, git 과 github 사용법에 대해 전반적으로 알아봄으로써 프로젝트 사전 준비를 마친 하루였다. 실습해보면서 느낀건 팀원들간의 상호 소통이 중요할 것 같다는 생각이 들었다.
github로 본인의 작업을 "push" 하고 팀원들이 실시한 작업을 "pull" 해올때 생각보다 매끄럽게 잘 안되었는데, 서로 간의 원활한 소통 및 정해진 규칙을 잘 따른다면 전혀 문제 없을 것 같다.🤔
가장 중요한건❗ Master 역할의 팀장이 초기 git 구성을 잘 구성하고, 팀원들은 구성된 작업을 개인의 로컬 저장소로 이상없이 가져와서 ❗그때부터❗ branch 를 만들어서 각자가 맡은 역할을 개발하는 것인 것 같다.
여기서 하나라도 잘못된 상태에서 시작하면 그 뒤로도 쭉 오류가 발생하는것을 오늘 실습하면서 겪었다. 실제 프로젝트 때 이부분을 최대한 유의하여 💥시작이 반이다💥 라는 말이 있듯이, 시작할때부터 제대로 구성을 해야겠다고 느낀다.