초보 개발자

3 - 2 브랜치 기능 및 사용 병합 1 본문

깃 & 깃허브

3 - 2 브랜치 기능 및 사용 병합 1

taehyeki 2021. 9. 14. 17:29

새 브런치 만들기

apple, google, ms라는 고객사가 있다고 가정하자

깃에서 브랜치를 만들거나 확인하는 명령어는 git branch이다.

master는 특별한 브랜치이다. 기본적으로 만들어 지고 우리는 그동안 여기서 작업을 해왔던 것이다.

git branch apple
git branch

apple브랜치가 잘 추가된 것을 확인할 수 있고, master 앞에 *표시는 아직 우리가 master브랜치에서 작업하고 있다는 뜻이다.

git log

커밋 로그 화면도 다르게 나타나는 것을 확인 할 수 있을 것이다.

(HEAD -> master, apple ) 이 표시는 저장소에 master, apple 2개의 브랜치가 있고 HEAD -> master이므로

현재 작업중인 브랜치는 master브랜치라는 의미 입니다.

git branch google
git branch ms
git branch

브랜치들이 잘 추가된 것을 확인할 수 있다.

 

브랜치 사이 이동하기 - git checkout

git log

git log로 확인해 보면 master브랜치를 비롯해 ms,google,apple 브랜치가 'work 3'커밋 상태에서 만들어 진 것을 알 수 있다. 즉 이 것은 master 브랜치 뿐만 아니라 ms와 google, apple 브랜치에도 최신 커밋이 'work 3'이라는 뜻이다.

 

우리는 master 브랜치에 있다. 커밋을 하나 만들어서 어떻게 달라지는 지 확인해 보겠다.

work.txt안에 master content 4라는 내용을 추가한 뒤 master content 4 라는 메시지와 함께 커밋해보겠다.

git log --oneline // 한 줄에 한 커밋씩 나타나기 때문에 간략히 확인할 때 편리

최신 커밋인 master content 4는 master 브랜치에만 적용되어 있다.

다른 브랜치는 아직 work 3커밋 상태이다.

 

현재 브랜치에서 다른 브랜치로 이동하면 어떻게 변하는 지를 살펴보겠다. 다른 브랜치로 이동하려면 git checkout 명령 다음 브랜치 이름을 사용한다. 

그리고 OOO브랜치로 체크아웃 한다고 말한다. apple 브랜치로 체크아웃 해보겠다.

그 전에 master브랜치에있는 wort.txt를 보고 가자

git checkout apple
git log --oneline

master브랜치에서 apple브랜치를 분기하기 전까지 master브랜치에 있던 커밋들은 그대로 apple 브랜치에 복사된 것을 확인할 수 있다. 그리고 최신 커밋 해시에서 HEAD가 apple을 가리키고 있다.

apple브랜치의 최신 커밋은 처음 분기될 때인 work 3커밋 그대로이다 여기서 work.txt의 내용을 보자.

master브랜치에서 입력했던 master content 4는 없다. 이를 통해서 apple 브랜치가 master브랜치에서 분기된 이후에 master브랜치에 추가된 커밋은 apple 브랜치에 영향을 미치지 않았다는 걸 알 수 있다.

 

새 브랜치에서 커밋하기

여러 브랜치에서 각각 커밋이 이루어질 때 커밋끼리 어떤 관계를 하고 있는지 확인하는 방법과 브랜치 사이의 차이점을 확인하는 방법을 알아보겠다.

work.txt에 apple content 4를 추가,

vim apple.txt 라는 파일을 만들어 apple content 4를 입력한다. 그리고 커밋을 한 뒤

git log --oneline

HEAD -> apple 이라고 되어 있으니 현재 apple 브랜치에 체크아웃한 상태고 apple 브랜치의 최신 커밋은 apple content4인 것을 알 수 있다.

git log --oneline --branches // --branches옵션을 사용하면 각 브랜치의 커밋을 함께 볼 수 있다.

이 부분을 보고 어떤 브랜치에서 만든 커밋인지 구별할 수 있다. 즉 master 브랜치의 최신 커밋은 master content 4 이고 ms브랜치와 google브랜치의 최신 커밋은 work 3이다.

 

좀더 쉽게 관계를 보기 위해서는 그래프 형태로 표시할 수 있고 --graph옵션을 주면된다.

git log --oneline --branches --graph

수직선이 커밋과 커밋의 관계를 보여주는 것이다. apple브랜치의 최신 커밋은 apple content 4인데 점선을 따라 부모를 찾아가면 work 3 커밋을 만나게 된다. 

 

즉 apple 브랜치에서는 work 3 커밋 다음에 apple content 4커밋이 만들어 졌다는 뜻이다.

마찬가지로 master브랜치에서도 수직선을 따라가면 work 3커밋인 것을 알 수 있다. apple, master브랜치 모두 같은 부모 커밋을 가지고 있다. work 3까지는 같고 그 이후 부터는 브랜치마다 다른 커밋을 만들었다는 사실 또한 알 수 있다. 

 

브랜치 사이의 차이점 알아보기

브랜치 마다 커밋이 쌓여갈 수록 브랜치 사이에 어떤 차이가 있는지 일일이 확인하기 어렵다.

이럴 때 브랜치 이름 사이에      ..   <<<을 넣어 쉽게 알 수 있다.

마침표 왼쪽에 있는 브랜치를 기준으로 오른쪽 브랜치와 비교한다.

예를들어 master브랜치와 apple브랜치 사이의 차이점이 무엇인지 확인하려면 다음과 같이 입력한다.

git log master..apple

이렇게하면 master브랜치에는 없고 apple브랜치에만 있는 커밋

apple content 4 커밋을 보여준다.

반대로 이렇게 하면

git log apple..master

master content 4커밋을 보여줄 것이다.

 

브랜치 병합하기

각 브랜치에서 작업을 하다가 어느 시점에서는 브랜치 작업을 마무리하고 기존 브랜치와 합해야 한다.

이것을 브랜치 병합이라고 한다.

 

서로 다른 파일 병합하기

새로운 파일을 만들고 거기서 작을 해보겠다.

새로운 work.txt를 만든 후 1을 적고 work 1메시지와 함께 커밋을 하겠다. 

HEAD와 각 브랜치가 가르키는 상황을 실시간으로 설명할텐데 그림이 없어 이해를 돕기 위함입니다.

 

현재 HEAD는 master를 가리키고 master는 work 1커밋을 가르킬 것이다.

 

이제 o2라는 이름의 브랜치를 만들어 보겠다.

 

git branch o2

 현재 HEAD는 master를 가리키고 master는 work 1커밋을 가르킬 것이다. 또한 새로 만든 o2브랜치 또한 work 1커밋을 가르킬 것이다.

 

여기서 master브랜치에 master.txt라는 파일을 생성하여 master 2라고 입력한 뒤 master work 2라는 메시지와 함께 커밋하겠다.

vim master.txt
git add master.txt
git commit -m 'master work 2'

현재 HEAD는 master를 가리키고 master는 master work 2커밋을 가르킬 것이다.

o2는 work 1커밋을 가르키고 있을 것이다.

 

이제 o2브랜치로 이동하자

git checkout o2

현재 HEAD는 o2를 가르키고 있고 o2는 work 1을 가르키고 있다. master는 master work 2를 가르키고 있다. (그만 적을까...)

o2브랜치에서 o2.txt라는 파일을 만들고 o2 2라고 입력을 한뒤 o2 work 2라는 메시지와 함께 커밋을 하겠다.

vim o2.txt
git add o2.txt
git commit -m 'o2 work 2'

현재 HEAD는 o2를 가르키고 있고 o2는 o2 work 2을 가르키고 있다. master는 master work 2를 가르키고 있다. 

git log --oneline --branches --graph

o2브랜치 작업이 다 끝났다고 가정하고 o2 브랜치의 내용을 master브랜치로 병합해 보겠다.

브랜치를 병합하려면 먼저 master브랜치로 체크아웃 해야한다.

 

git checkout master

브랜치를 병합하려면 git merge 명령 뒤에 가져올 브랜치 이름을 적는다. master 브랜치에 o2브랜치를 가져와 병합하려면 다음과 같이 입력해야 한다.

git merge o2

자동으로 vim이 실행되면서 Merge branch o2라는 커밋메시지가 나온다. 수정하고 싶지 않으면 그냥 :wq로 빠져나오자

현재 HEAD는 master를 가르키고 master는 Merge branch o2를 가르킨다. o2는 o2 work 2를 가르키고 있다.

git log --oneline --branches --graph

ls -l

o2브랜치에 있던 o2.txt파일이 master브랜치에 합쳐진 것을 확인할 수 있다.

다른 병합은 3-3에서 확인해보도록 하자

'깃 & 깃허브' 카테고리의 다른 글

3 - 4 브랜치 관리  (0) 2021.09.14
3 - 3 브랜치 기능 및 사용 병합 2  (0) 2021.09.14
3 - 1 깃과 브랜치  (0) 2021.09.14
2 - 4 특정 커밋으로 되돌리기  (0) 2021.09.13
2 - 3 작업 되돌리기  (0) 2021.09.13