branch
원본 파일에 수정을 진행하면서 f_ver1 -> f_ver2 처럼 버전을 관리하다가 특정 상황에서 목적에 따라 버전이 2가지 이상으로 나누어질 때가 있을 수 있다. 예를 들어서 고객전용 파일, 개발자 전용 파일등으로 나누어서 관리한다고 가정하자 그렇다면 위의 그림과 같이 2가지 파일의 버전을 따로 관리해야 한다. 이렇게 다른 목적에 의해 원본 파일이 분기되고 수정되어 관리되는 과정을 git에서 branch라고 한다.
추가로 두 가지 파일을 합쳐서 새로운 버전을 만드거나 버전을 통합시켜서 다시 관리할 수 있는 상황도 발생할 수 있다.
용어를 정리하면 , 한 원본 파일이 2가지 이상으로 분기되는 현상을 branch를 만든다고 하고 각 branch는 새로운 branch와 원래부터 유지하던 작업은 branch라고 할 수 있다. 따라서 버전관리는 하나 이상의 branch를 가지게 된다.
git branch 명령어를 사용하면 현재 사용하고 있는 branch를 알아볼 수 있다. 현재는 하나의 branch만 사용하고 있기 때문에 master라는 branch가 존재하는 것을 확인할 수 있다.
branch를 만드는 방법은 git branch 뒤에 branch 이름을 적어주는 것이다. exp라는 새로운 branch를 만들고 확인해보자
새로운 branch인 exp가 만들어진 것을 확인 할 수 있다 master의 *표시는 현재 내가 위치하고 있는 brnach의 정보를 나타내는 것으로 checkout 명령어를 통해서 내가 위치하는 branch를 다른 branch로 변경할 수 있다.
checkout을 통해서 exp brnach로 이동했다 이후 branch를 보게되면 최근에 만들었던 branch의 상태와 같다는 것을 알 수 있다. 새로운 branch를 생성할 때 만들어진 시점의 존재하던 원래의 branch를 복사하는 방식으로 진행되는 것임을 예상할 수 있다.
각 brnach에서 log 명령어를 실행하면 log의 내용이 다른 것을 확인 할 수 있다. 왜냐하면 exp branch에서만 추가로 commit 작업을 수행했기 때문이다. 따라서 각 brnach마다 버전을 따로 관리하고 있다는 것을 확인 할 수 있다.
현재 저장소의 모든 branch에 대한 로그 확인을 하고 싶다면 git log --branches 를 사용할 수 있다 .
이 때 --decorate인자를 주어 어떤 branch에 해당하는 log인지 확인하고 추가로 --graph인자를 통해 선의 색깔로 분기를 쉽게 파악할 수 있다.
각 branch는 3이라는 버전을 각각의 버전으로 관리하고 공통의 조상으로는 22라는 버전을 갖고 있는 것을 확인 할 수 있다. 첫 줄의 HEAD는 현재 위치하는 brnach가 master임을 나타낸다.
이 때 --oneline이라는 옵션을 추가하면 선을 하나로 나타내어 더욱 관계를 보기 쉽게 단일화된 선으로 나타낸다.
맨 처음 branch의 예시 그리과 같이 선의 형식으로 나타내면서 더욱 관계를 편하게 파악 할 수 있다.
branch 비교하기
git log master..exp >> master에는 없고 exp에는 존재하는 commit을 표시함
git log exp..master >> 반대로 exp에는 없지만 master에는 존재하는 commit을 표시한다
여기서 -p플래그를 추가하면 commit뿐만 아니라 소스코드의 변경내용도 추가로 표시한다
git diff master..exp >> 각 branch의 현재 상태를 비교한다
내용을 살펴보면 index ca89.. 에는 branch라는 문자열이 f1.txt에 추가되었고
index 789.. 에는 f3라는 파일이 새로 생성되었음을 알 수 있다.
branch 병합
두 개의 분기된 branch를 병합하는 방법은 merge라는 명령어를 사용한다
(master로 체크아웃 후) git merge exp => exp를 master로 가져온다
그 후 log branches를 통해서 결과를 확인해보면 새로운 branch가 "merge branch 'exp'로 생겨난 것을 알 수 있다.
이 때 brnach는 2개의 commit의 부모를 가지는 새로운 commit을 최근 commit으로 설정하게 된다.
그 후 git branhoch -d exp 명령어를 사용하면 exp brnach는 제거 되게 된다.
'Infra > GIT&GIT HUB' 카테고리의 다른 글
Git (8) : stash (임시저장) (0) | 2021.07.18 |
---|---|
Git (7) : branch & merge (0) | 2021.07.17 |
Git (5) : Reset , Revert 기초 (0) | 2021.07.09 |
Git (4) : 버전관리 (0) | 2021.07.08 |
Git (3) : git 기본 명령어 (0) | 2021.06.30 |