GIT

[Git] git branch

찰리-누나 2022. 12. 29.

 

 

 


사본을 만들어주는  git branch

 

앞서 git status를 실행할 때마다, On branch master이라는 문구가 늘 출력되었음을 볼 수 있다. 여기서 branch란 무엇일까? 교과서적으로 브랜치(branch)는 '독립적으로 어떤 작업을 진행하기 위한 개념' 이라고 한다. 그러나 이렇게 말하면 이해하기 어렵다. 

 

로그인, 회원가입 보일러 플레이트를 만든다고 가정해보자. JWT를 이용해 회원가입과 로그인을 구현하던 어느날, 아, 'passport라이브러리를 사용하게 수정해보고 싶은데..' 라고 생각하게 되었다. 그런데 만일 작업이 잘못되어 이전으로 돌아가야 할 상황이 생기면 어떻게 해야할까?

 

passport 라이브러리를 사용해 코드를 수정하기 전, 모든 파일을 복사하여, 복사한 파일의 코드를 수정하는 방식을 사용해볼 수도 있겠지만 이는 너무나도 비효율적인 방식이다. Git은 '복사하여, 복사한 파일의 코드를 수정하게' 해 주는 기능을 제공한다. 이것이 브랜치branch 이다. 명령어를 통해 커밋, 즉 레포지토리에 저장된 코드의 복사본을 만들게 해 주는 것이다. 

 

즉, 브랜치란 간단히 말해 '커밋의 복사본' 을 뜻한다. 

 

[ git branch 브랜치명 ] 을 사용하면 브랜치를 생성한다.

[ git switch 브랜치명 ] 을 사용하면, 해당 이름의 브랜치로 이동한다. 

 

first라는 이름의 브랜치를 만들고, 해당 브랜치로 이동해보자.

On branch first를 통해 현재 first 브랜치에 있음을 알 수 있다.

 

패스포트 라이브러리를 사용했다고 가정하기 위해, passport.txt 파일을 만들고 git add . 와 커밋을 해 주었다. 브랜치에서도 일반 파일과 똑같이 add와 커밋의 사용이 가능하다는 것을 알 수 있다.

 

현재 상태를 status로 출력하면, 아까 확인했던것 처럼 first 브랜치에 있다는 뜻인 On branch first를 출력한다. 교과서적 의미에서 '브랜치들은 서로 독립적이다' 라고 했는데, 이 의미를 확인해보기 위해 master 브랜치로 돌아가보자. 브랜치를 생성하지 않았을 때 status를 통해 확인할 수 있는 On branch master의 그 maste이다. 

 

[git switch master] 를 통해 마스터 브랜치로 돌아가, master.txt라는 파일을 생성하고 내용을 작성한 뒤 저장한다. 그리고 git add와 commit을 해 주었다.

마스터 브랜치로 이동해 파일을 생성한 후, 커밋하였다.

 

따라서 각 브랜치의 상태는 다음과 같다.

master 브랜치 first 브랜치
master.txt 파일을 생성하였음.
(passport.txt는 생성하지 않았음.) 
passport.txt 파일을 생성하였음.
(master.txt 파일을 생성하지 않았음.)

 

[ git log --oneline --all --graph ] 를 사용해 그래프 형식으로 깃 로그를 출력해본다.

HEAD는 현재 나의 위치를 뜻한다. master 브랜치에서 로그를 출력하였기 때문에, HEAD->master 이라는 표기가 되어 있다. 맨 앞에는 각 커밋의 아이디가 있고, 괄호 속에는 ' 어느 브랜치에서 ' 커밋했는지가 표기되어 있다.

(HEAD -> master) 는 '현재 위치한 master 브랜치에서 커밋함' 을 의미하며, (first) 는 'first 브랜치에서 커밋함'을 의미한다. 이 구조를 그림으로 나타내면 아래와 같다.

master 브랜치와 first 브랜치의 구조

 

first 브랜치에서 작업한 내용이 마음에 들어, master 브랜치, 즉 원본 파일에 반영해주고 싶은 경우는 merge 명령어를 사용한다.

[git merge 브랜치이름] 을 입력하면 브랜치를 병합한다.

git merge를 사용하여 브랜치를 병합하자, 취소줄이 사라졌다.

그래프 형식으로 로그를 출력하면 Merge branch 'first'를 통해 브랜치가 머지(merge) 되었음을 확인할 수 있다.

first 브랜치가 머지되었다.

 

 

그러나 이는 'master' 브랜치와 'first' 브랜치에서 수정한 파일이 달랐기 때문에 머지(merge)가 정상적으로 수행된 경우에 속한다. 만일 각각 다른 브랜치에서, 동일한 파일의 내용을 서로 다르게 수정할 경우에는 어떻게 머지를 실행해 주어야 하는지 알아보자. 

 

우선 master.txt의 내용을 master 브랜치에서 수정한다.

master 브랜치에서 텍스트 파일을 수정한 다음, 커밋 해 주었다.

 

second 브랜치를 만들고, second 브랜치로 master.txt의 내용을 아래와 같이 수정해준다.

master.txt의 내용을 second 브랜치에서 수정한 다음, 커밋 해 주었다.

 

 

이제 머지(merge)를 실행해 본다. [ git merge second ] 를 입력하자 아래와 같이 충돌을 의미하는 CONFLICT가 출력되었다.

같은 파일의 같은 부분을 수정할 경우, 충돌이 발생한다.

 

먼저 이 초록색과 푸른색으로 표현된 부분을 알아보자.

 

이 두 부분은 어디서 충돌이 일어났는지를 시각적으로 보여주고 있다. 따라서 이들 중 원하는 코드만 남기고, 나머지 부분은 지워준 뒤 git add와 commit을 통해 해결해줄 수 있다.

 

'GIT' 카테고리의 다른 글

[Git] git diff  (0) 2022.12.29
[Git] 깃 설치와 git add , git commit, git restore  (0) 2022.12.29

댓글