ㅡ 들어가는 글 ㅡ
branch(분기)는 버전 관리를 위해서 꼭 필요한 기능입니다.
예를 들어, 어떤 제품을 만들C고 고객사에게 사용 설명서를 제공 할 때 기업마다 미묘한 차이가
있을 수 있습니다. 이 때, branch를 이용해서 여러가지 버전으로 나누고 병합할 수 있습니다.
ㅡ 목표 ㅡ
깃의 branch기능을 이해하기
기본적으로 master 라는 branch가 존재합니다.
$git log 명령어를 이용할 때, 첫 줄에 HEAD -> master 라고 되어있는 것을 확인할 수 있습니다.
여기서 HEAD란 현재 이용중인 branch의 제일 최근 커밋을 가리키는 특수한 포인터라고 할 수 있습니다.
- branch 만들기
branch를 만들거나 확인 할 때는 다음과 같은 명령어를 사용합니다.
$ git branch 이름
이름을 적지 않으면 현재 존재하는 branch를 확인 할 수 있습니다.
- branch 이동하기
branch를 만들면 다른 branch로 이동할 수 있어야 하는데요.
이동은 다음과 같은 명령어로 할 수 있습니다.
$ git checkout 이름
이름이라는 branch로 이동 할 수 있습니다.
이렇게 branch를 옮기면 파일 경로 끝에 (master)가 현재 branch로 바뀌어 있습니다.
- branch 확인하기
branch를 여러개 만들고 이동해서 커밋을 하면 작성자도 헷갈릴 수 있습니다.
내가 만든 branch가 어느 커밋을 가리키고 있는지 다음과 같은 명령어로 확인 할 수 있습니다.
$ git log --oneline --branches
위 명령어를 통해 어떤 branch가 가리키고 있는 커밋 내용을 볼 수 있습니다.
--oneline명령어를 통해 branch가 가리키는 최근커밋을 간략하게 확인 할 수 있습니다.
--branches명령어를 통해 커밋 내용까지 확인 할 수 있습니다.
이렇게 글로 확인하면 눈에 확 들어오지 않습니다.
$ git log --oneline --branches --graph
위와 같이 --graph 옵션을 추가해서 시각적으로 확인 할 수 있습니다.
커밋의 관계를 확인할 수 있습니다.
- branch 간 차이 확인하기
여러개의 branch를 만들다보면 어떤 차이점이 있는지 확인해야되는 상황이 생깁니다.
A와 B라는 branch가 존재한다고 했을 때,
$ git log A..B
위와 같은 명령어로 차이점을 확인 할 수 있습니다. 각 branch 사이에 ".."을 띄어쓰기 없이 적으면 됩니다.
A를 기준으로 B와 비교하는 것입니다. 쉽게 말해, A는 없고 B에만 있는 커밋을 보여줍니다.
- branch 병합하기
여러개의 branch를 만들어서 프로젝트를 진행하다가 작업을 마무리하고 합쳐야하는 경우가 생깁니다.
처음에 기본으로 있는 master branch와 제가 임의로 만든 "A"라는 branch가 있다고 가정하겠습니다.
A에서도 파일을 만들고, master에도 변화가 있다고 했을때 A를 master에 병합해보겠습니다.
병합하려면 우선 병합할 branch로 이동해야합니다. $git checkout master 명령어를 사용합니다.
$ git merge A
master branch에서 위와같은 명령어를 사용하면 A가 master에 병합됩니다.
편집기 창에서 커밋메세지가 나타나는데, 병합하면서 생기는 커밋메세지입니다. 수정해도 되고 그냥 사용해도 됩니다.
--no-edit 옵션을 추가하면 편집기 창이 열리지 않습니다. 반대로, --edit 옵션을 넣으면 편집기 창이 뜨게됩니다.
근데 같은 문서의 같은 위치를 수정했을 때 병합하면 어떻게 될까요?
깃에서는 줄 단위로 변경 여부를 확인합니다. 같은 줄을 수정하면 충돌(conflict)이 발생합니다.
이런 경우에 병합(merge)을 하면 충돌한 파일을 제외하고 다른 파일들은 병합이 됩니다.
그럼 충돌이 발생한 파일은 어떻게 할까요? cat명령어를 이용하거나 직접 파일을 열어서 내용을 확인하면
내용이 살짝 변경 된 것을 확인 할 수 있습니다.
위에서 했던 것 처럼, master와 A를 병합할 때 충돌이 발생해서 파일을 열어보면 아래와 같이 되어있습니다.
# title
<<<<<<<<HEAD
내용1
============
>>>>>>>>A
내용2
내용1은 현재 브랜치에서 수정한 내용이고, 내용2는 병합할 브랜치에서 수정한 내용입니다.
'<<<<<HEAD'나 '>>>>>A' 혹은 "======"와 같은 내용은 삭제하고 문서를 저장하고 커밋하면 됩니다.
프로젝트의 규모가 커지면 이런 경우가 자주 발생할 수 있습니다.
그래서 병합 및 충돌 해결을 도와주는 P4Merge나 Araxis Merge같은 무,유료 프로그램들이 존재합니다.
병합이 끝났다고 해서 병합된 branch가 삭제되는 것은 아니고 다시 예전 내용을 확인 할 수 있습니다.
- branch 삭제하기
branch를 삭제하는 방법은 아래와 같습니다.
$ git branch -d A
A branch를 -d 옵션을 통해 삭제하는 것입니다.
하지만, 완전히 삭제하는 것이 아니라 흐름속에서 감춘다고 하는 것이 옳은 표현일 수 있습니다.
왜냐하면 다시 A라는 branch를 생성하면 내용이 그대로 돌아오기 때문입니다.
'DevOps > GIT & GITHUB' 카테고리의 다른 글
[GIT] git pull 시 merge 오류 발생했을 때 강제로 덮어쓰는 방법, git fetch, reset, pull (1) | 2021.11.24 |
---|---|
[GIT] git bash 관리자 권한으로 실행하기 (0) | 2021.09.06 |
본격적으로 GITHUB 사용하기! - remote, push, pull, fetch (0) | 2021.02.10 |
GIT을 이용한 버전관리 - 생성, 스테이지와 커밋, 커밋 되돌리기 (0) | 2021.02.08 |
GIT을 위한 간단한 리눅스 명령어 모음 (0) | 2021.02.08 |