Git Branch 사용하기
by youngjun._.Git 기초 공부하기 목차
(1) 2020/02/29 - [Git] - Visual Studio Code에 Github 연동하기
(2) 2020/04/16 - [Git] - Git 이란?
(3) 2020/04/17 - [Git] - Git 설치 및 커멘드 사용법
(4) 2020/04/18 - [Git] - Git Branch 사용하기
(5) 2020/04/19 - [Git] - Git remote 원격 저장소와 Github
(6) 2020/04/20 - [Git] - Git - Pull Request 활용하기
Git Branch I
Git Branch란 독립적으로 어떤 작업을 진행하기 위한 개념입니다. 각각의 Branch는 다른 Branch의 영향을 받지 않기 때문에, 여러 작업을 동시에 진행할 수 있습니다.
Git Branch에는 어떤 종류가 있고, 어떻게 관리할 수 있는지 알아봅시다.
1. Git Branch 종류
통합 브랜치(Integration Branch)
통합 브랜치란 언제든지 배포할 수 있는 버전을 만들 수 있어야 하는 브랜치 입니다. 그렇기 때문에 늘 안정적인 상태를 유지하는 것이 중요합니다. 여기서 ‘안정적인 상태’란 현재 작업 중인 소스코드가 모바일에서 동작하는 어플리케이션을 개발하기 위한 것이라면, ‘그 어플리케이션의 모든 기능이 정상적으로 동작하는 상태’를 의미합니다.
만약 이 어플리케이션에 어떤 문제가 발견되어 그 문제(버그)를 수정한다던지 새로운 기능을 추가해야 한다던지 해야할 때, 바로 ‘토픽 브랜치(Topic branch)’를 만들 수 있습니다. 처음에는 보통 통합 브랜치에서 토픽 브랜치를 만들어 냅니다.
일반적으로 저장소를 처음 만들었을 때에 생기는 master 브랜치를 통합 브랜치로 사용합니다.
토픽 브랜치(Topic Branch)
토픽 브랜치란, 기능 추가나 버그 수정과 같은 단위 작업을 위한 브랜치 입니다. 여러 개의 작업을 동시에 진행할 때에는, 그 수만큼 토픽 브랜치를 생성할 수 있습니다.
토픽 브랜치는 보통 통합 브랜치로부터 만들어 내며, 토픽 브랜치에서 특정 작업이 완료되면 다시 통합 브랜치에 병합하는 방식으로 진행됩니다. 이러한 토픽 브랜치는 ‘피처 브랜치(Feature branch)’ 라고 부르기도 합니다.
2.Git Branch II
2. Git Branch 생성
새로운 기능을 추가하기위해 Git Btanch를 생성해보겠습니다. Git Branch 생성은 git branch <Branch 명>으로 생성할 수 있습니다.
여기선 like_feature란 Branch를 생성해보겠습니다.
3. Git Branch 확인
저장소에 존재하는 Branch는 git branch 명령어를 통해 확인할 수 있습니다.
Branch 앞에 ‘*’ 이 표시된 Branch가 현재 선택된 Branch 입니다.
4. Git Branch 전환
Branch 전환은 git checkout <Branch 명>으로 할 수 있습니다.
git branch 명령어로 확인해보면 like_featureBranch로 전환된 것을 확인할 수 있습니다.
git checkout 명령어에서 -b 옵션을 넣으면 Branch 생성과 동시에 전환할 수 있습니다.
예시: git checkout -b like_feature
git checkout <Branch 명> 후 작업된 내역은 모두 해당 Branch에 기록됩니다.
branch에서 수정하고 commit 한 로그는 git log로 확인 가능
master에서 수정하고 commit 한 로그도 git log로 확인 가능
모두 표시하려면 git log –graph –all 명령어를 사용하면 됩니다.
branch 생성과 동시에 checkout하는 명령어 checkout –b
Git Merge
앞장에서 like_feature Branch에 작업을 완료했습니다. 현재까지의 이력을 그림으로 나타내면 다음과 같이 표시할 수 있습니다.
이제 like_feature Branch에서의 작업을 통합 Branch인 master Branch와 병합 해보겠습니다.
merge를 하면 기존 기록을 바꾸지 않지만 새로운 commit을 하나 만듦!
내가 서있던 branch (youngjun)에서 master를 merge하면 그걸 받아서 한 발 더 앞서 간다는 얘기
master는 fast forword를 통해 일직선 상에 있는 commit이면 그냥 이동함??
Git Merge
Branch 병합은 git merge <Branch 명>으로 가능합니다.
Branch를 병합하기에 앞서 병합할 master Branch로 이동해야 합니다. git checkout <Branch 명>명령어를 사용하여 master Branch로 이동합니다.
이제 git merge <Branch 명> 명령어를 사용하여 like_feature Branch와 master Branch를 병합합니다.
현재까지의 이력을 그림으로 나타내면 아래와 같습니다.
이런 방식의 병합을 Fast-Forward이라고 합니다. like_feature Branch가 병합될 때 masterBranch는 아무런 변경사항이 없고, like_featureBranch는 master Branch의 이력을 모두 포함하고 있기 때문에 like_feature Branch를 master로 옮기기만 하면 되기 때문입니다.
그렇다면 like_feature Branch가 병합될 때 master Branch에 변경사항이 있다면 어떻게 될까요?
다음장에서 알아봅시다.
Git Merge II
앞장에서 Fast-Forward 병합에 대해 알아보았습니다. 만약 like_feature Branch가 병합될 때 master Branch에 변경사항이 있다면 어떻게 될까요?
병합할 Branch에 변경사항이 있더라도 같은 파일에서 중복되는 경우가 아니면 Git에서 자동으로 병합해줍니다. 이번에는 같은 파일에서 중복되는 부분이 있어 충돌(Conflict)가 발생했을 때 해결하는 방법에 대해 알아보겠습니다.
2. 충돌(Conflict) 해결하기
현재 master Branch의 comment.js 파일의 내용입니다.
// comment.js
$(“.comment-good”).text(“0”);
새로운 기능을 추가하기 위하여 like_featureBranch를 생성하고 코드를 추가했습니다. 하지만 코드를 추가하는 동안 master Branch에서도 코드 추가가 이루어졌습니다.
master Branch
// comment.js
$(“.comment-good”).text($(“.comment-good”).val()-1);
like_featureBranch
// comment.js
$(“.comment-good”).text($(“.comment-good”).val()-1 < 0 ? 0 : $(“.comment-good”).val()-1);
현재 상태에서 병합하면 어떻게 될까요? git checkout master 후 git merge like_feature명령어를 실행했습니다.
예상했던대로 자동 병합에 실패했습니다. 병합에 실패했을 경우 Git에서는 충돌되는 파일을 알려주고, 사용자는 충돌되는 파일을 확인해서 수정해야합니다.
충돌이 발생하는 파일을 다시 확인하고 싶을 땐 git status 명령어를 사용해서 확인할 수도 있습니다.
문제가 되는 파일인 comment.js파일을 열어보겠습니다.
// comment.js
<<<<<<< HEAD
$(“.comment-good”).text($(“.comment-good”).val()-1);
=======
$(“.comment-good”).text($(“.comment-good”).val()-1 < 0 ? 0 : $(“.comment-good”).val()-1);
>>>>>>> like_feature
comment.js파일의 내용이 변경된 것을 확인할 수 있습니다. 병합에 충돌이 발생하면 Git에서는 사용자가 어느 부분이 충돌되는지 알 수 있도록 위와 같이 파일의 내용을 변경합니다.
======= 문자열을 기준으로 위쪽의 내용은 HEAD(git merge 명령을 실행할 때 작업하던 master Branch)의 내용이고 아래쪽은 like_feature Branch의 내용입니다.
사용자는 위쪽이나 아래쪽 코드 중에서 반영할 내용을 고르거나 새로 작성하여야합니다.
수정완료 후 코드를 제외한 나머지 부분들을 삭제한 후 저장합니다.
// comment.js
$(“.comment-good”).text($(“.comment-good”).val()-1 < 0 ? 0 : $(“.comment-good”).val()-1);
수정된 코드를 git add 명령어와 git commit 명령어를 사용하여 저장소에 반영합니다.
Git Branch 삭제
앞서 master Branch에 병합된 like_featureBranch 처럼 필요 없어진 Branch는 어떻게 삭제할까요?
Branch 삭제는 git branch -d <Branch 명>으로 가능합니다.
'Tool > Git' 카테고리의 다른 글
Github - 마크다운(MarkDown) 문법 정리 (2) | 2020.04.23 |
---|---|
Git - Pull Request 활용하기 (6) | 2020.04.20 |
Git remote 원격 저장소와 Github (0) | 2020.04.19 |
Git 이란? (2) | 2020.04.16 |
Visual Studio Code에 Github 연동하기 (4) | 2020.02.29 |
블로그의 정보
개발하는만두
youngjun._.