깃 허브(GitHub) 브랜치(branch) 병합에 대해서

지난번「깃 허브(GitHub) 브랜치(branch)에 대한 정리」에 이어서 이번에는 브랜치 병합에 대해서 블로그를 작성해봤습니다.
2021.06.29

안녕하세요 클래스메소드 김재욱(KimJaewook)입니다.

지난 시간 깃허브 브랜치에 대한 정리에 이어서 이번에는 각 브랜치들을 병합하는 방법에 대해서 정리해봤습니다

브랜치 병합

각 브랜치에서 작업을 하다가 어느 시점에서는 브랜치를 합쳐야할때가 옵니다.

이러한 작업을 브랜치 병합이라고 하는데, 이번에는 이 병합에 대해서 알아보도록 하겠습니다.

cd ~
git init manual-2
cd manual-2
ls -al

git init manual-2를 하게 되면 manual-2라는 디렉토리를 만들고 저장소로 초기화하게 됩니다.

vim work.txt
git add work.txt
git commit -m "work 1"

work.txt 를 만들고 1을 입력한 다음 저장하고 스테이징, 커밋을 해줍니다.

현재 상태입니다.

HEAD-master 즉 현재 master 브랜치에서 작업을 하고 있고, work1를 하나 커밋했습니다. 이어서 git branche o2 명령어로 o2라는 브랜치를 하나 만들어줍니다.

그럼 현재 master와 o2가 work1를 가리키고 있습니다.

이제 master 텍스트를 만들어서 master 2를 입력하고 저장, 커밋 해보겠습니다.

  • vim master.txt
  • git add master.txt
  • git commit -m "master work 2"

커밋을 하고 나면 현재 상태는 master 는 Master work2를 가리키고 있는 상태가 될 것이고,

o2는 work 1을 가리키고 있는 상태가 될 것 입니다.

  • git checkout o2
  • vim o2.txt
  • git add o2.txt
  • git commit -m "o2 work 2"

이어서 git checkout o2 명령어를 통해서, o2로 체크아웃을 하고, o2라는 텍스트 파일을 만들어 o2 2 를 입력하고 저장, 커밋합니다.

그리고 현재 상태입니다. work1 에서 branch 되어 o2 work 2가 생성 되었습니다.

그리고 현재 HEAD는 o2입니다.

  • git log --oneline --branches --graph

다음 명령을 통해서 살펴보면 o2는 o2 work2, master는 master work 2를 가리키고 있으며, 부모는 work 1입니다.

그럼 이제 o2 브랜치의 내용을 master 브랜치로 병합 해보겠습니다.

o2 브랜치를 master 브랜치로 병합

  • git checkout master

먼저 master 브랜치로 병합 하기 위해서는 master로 체크아웃 해야합니다.

  • git merge o2

그리고 다음 명령어를 통해 병합을 합니다.

이어서, vim 창이 뜨게 되는데, 메시지를 수정해도 좋고 그대로 저장해도 좋습니다.

합병을 하고난 상태입니다.

HEAD는 master 브랜치를 가리키고 있고, master 는 Merge branch o2 커밋을 가리키고 있게 됩니다.

  • git log --oneline --branches --graph

다음 명령을 통해 살펴보면, master가 Merge branch o2를 가리키고 있는것을 볼 수 있습니다. 즉, 두 브랜치에서 서로 다른 파일을 병합하는 경우 이렇게 깃에서 간단하게 해결할 수 있습니다.

같은 문서, 다른 위치 병합

이어서, 다음은 같은 문서의 다른 위치를 수정 했을 때 병합하면 어떤 결과가 나오는지 살펴보겠습니다.

  • cd ~
  • git init manual-3
  • cd manual-3
  • vim work.txt
  • git add work.txt¥
  • git commit -m "work 1"

가운데 두 줄은 비워두고 입력한 다음, 커밋합니다.

  • ​git branch o2

그리고 o2 브랜치를 만듭니다.

  • vim work.txt

그리고 master 브랜치에서 work.txt 를 수정합니다.

  • git commit -am "master work 2"

다음과 같이 수정 하고, 커밋합니다.

  • git checkout o2
  • vim work.txt

다음은 o2 브랜치로 이동한 다음, work 텍스트 파일을 수정해줍니다.

하단에 o2 content 2를 입력한 다음, 저장하고 커밋합니다.

  • git commit -am "o2 work 2"

이렇게 되면 현재 master 브랜치와, o2 브랜치에서의 수정한 위치가 다르게 됩니다.

합병 테스트

이제 브랜치를 master 에서 합병 해보도록 하겠습니다.

  • git checkout master
  • git merge o2

합병을 하고나면 work.txt 파일은 어떻게 변했을지 cat 명령어를 통해 확인해봅시다.

그러면 master 에서 작성했던 master content 2와 o2 브랜치에서 작성했던 o2 content 2가 잘 합쳐진 것을 볼수 있습니다.

다음은 같은 문서의 같은 위치를 수정 했을 때 어떤 결과가 나오는지 확인 해보도록 하겠습니다.

  • cd ~
  • git init manual-4
  • cd manual-4
  • vim work.txt

다음과 같이 작성해줍니다.

  • git add work.txt
  • git commit -m "work 1"
  • git branch o2
  • vim work.txt

커밋을 해주고, o2라는 브랜치를 생성한 다음, master 브랜치에서 work를 수정 하겠습니다.

다음과 같이 수정합니다.

  • git commit -am "master work 2"

그리고 커밋합니다.

  • git checkout o2
  • vim work.txt
  • git commit -am "o2 work 2"

그런다음 o2 브랜치의 work.txt 도 다음 그림과 같이 수정하고 커밋합니다.

  • git checkout master
  • git merge o2

그리고 합병을 해보면 다음과 같은 에러문구가 뜨게 됩니다.그럼 현재 work.txt 는 어떻게 됐는지 확인 해보도록 하겠습니다.

그럼 각 브랜치에서 수정했던 내용들이 나오게 됩니다.

여기서 파일들을 다시 수정해줍니다.

적당히 수정하고 저장합니다.

  • git commit -am "merge o2 branch"

그리고 다시 커밋을 해주면 됩니다.

이렇게 병합이 끝난 후, 더이상 사용하지 않느 브랜치는 깃에서 삭제할 수 있습니다. 삭제 하더라도 완전히 지워지는 것이 아니라, 다시 같은 이름의 브랜치를 생성하면 이전에 만들었던 내용을 다시 볼수 있습니다. 현재 브랜치에는 master 와 o2가 있습니다. 기본적인 브랜치는 master이기 때문에 master 브랜치로 체크아웃한 다음 삭제 명령어를 입력해야합니다.

  • git checkout master
  • git branch -d o2