[Git] 브랜치2-(브랜치 정보 확인),(병합)

6612 단어 gitgit

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

새 브랜치에서 commit하기

  • apple 브랜치에 새로운 커밋을 만들어 봅니다.
  • 현재 apple 브랜치로 체크아웃을 한 상태입니다.

1.apple 브랜치에는 work.txt파일이 있습니다.
빔에서 이 파일을 열고 'apple content 4'라는 텍스트를 추가하고 저장합니다.

$ vim work.txt

2.실제 업무에서는 apple고객사만을 위한 내용이 담긴 파일도 필요합니다. apple.txt라고 새로운 파일도 만들어줍니다.
빔에서 apple.tx문서를 만들고 여기에도 똑같이 'apple content 4'라는 텍스트를 입력하고 저장합니다.

$ vim apple.txt

3.수정된 2개의 파일을 각각 스테이지에 올릴 수도 있지만 git add뒤에 마침표(.)를 추가하면 현재 저장소에서 수정된 파일을 한꺼번에 스테이지에 올릴 수 있습니다.
add . 명령을 실행하고 'apple content 4'라는 메시지와 함께 커밋해줍니다.

$ git add .
$ git commit -m "apple content 4"

4.커밋이 어떻게 저장되는지 git log 명령을 사용해 확인해 봅니다.

5.첫번째 줄에 (HEAD->apple)이라고 되어있으니 현재 apple 브랜치에 체크아웃한 상태이고, apple 브랜치의 최신 커밋은 'apple content 4'입니다.

6.git log 명령을 사용할 때 다음과 같이 --branches 옵션을 사용하면 각 브랜치의 커밋을 함께 볼 수 있습니다.

$ git log --oneline --branches

7.결과 화면을 보면 커밋 해쉬마다 오른쪽에 (HEAD ->apple), (master) , (ms,google)이라고 표시되어 있습니다.
이 부분을 보고 어떤 브랜치에서 만든 커밋인지 구별할 수 있습니다.
즉, master 브랜치의 최신 커밋은 'master content 4'이고 ,ms,google 브랜치의 최신 커밋은 'work3'입니다.

8.브랜치와 커밋의 관계를 좀 더 보기 쉽게 그래프 형태로 표시하려면 git log 명령에 --graph 옵션을 함꼐 사용합니다.

$ git log --oneline --branches --graph

9.커밋 내역 왼쪽에 (|)수직선이 있습니다.
이 점선이 커밋과 커밋의 관계를 보여주는 것입니다.
그래프를 살펴보면 apple 브랜치의 최신 커밋은 'apple content4'인데 점선을 따라 'apple content 4'커밋의 부모를 따라가면 'work3' 커밋을 만나게 됩니다.
즉, apple 브랜치에서는 'work3' 커밋 다음에 'apple content 4' 커밋이 만들어졌다는 뜻입니다.

10.master 브랜치도 봅니다.
master 브랜치의 최신 커밋은 'master content 4'입니다.
그리고 수직선을 따라 부모 커밋을 찾아보면 'work3'커밋 입니다.
apple 브랜치의 커밋과 master 브랜치의 커밋이 같은 부모 커밋을 가지고 있습니다.
즉, master 브랜치나 apple 브랜치는 'work3' 커밋까지는 같고 그 이후부터 브랜치마다 다른 커밋을 만들었다는 사실을 알 수 있습니다.

브랜치 병합하기

  • 이제 만들어진 각 브랜치에서 작업을 하다가 어느 시점에서는 브랜치 작업을 마무리하고 기존 브랜치와 합해야 합니다.
  • 이것을 '병합(merge)'라고 합니다.
  • 브랜치와 브랜ㅊ를 병합하다 보면 여러 상황이 생길 수 있는데 각 상황마다 병합하는 방법을 알아봅니다.

서로 다른 파일 병합하기

1.터미널 창을 열고 홈 디렉토리로 이동합니다.

  • manual-2라는 깃 저장소를 만들텐데, git init 다음에 디렉토리 이름을 입력하면 새로운 디렉토리를 만들고 저장소를 초기화하는 과정을 한번에 처리할 수 있습니다.
  • manual-2 디렉토리로 이동한 후에 ls -al 명령을 사용하면 .git/디렉토리가 만들어진 것을 확인할 수 있습니다.
$ cd ~
$ git init manual-2
$ cd manual-2
$ ls -al

2.빔에서 work.txt파일을 만들고 '1'이라는 내용을 입력한 후에 저장합니다.

  • 그리고 'work 1'이라는 커밋 메세지와 함께 커밋합니다.
$ vim work.txt
$ git add work.txt
$ git commit -m "work 1"

3.'o2'라는 브랜치를 새로 만들어 줍니다.

$ git branch o2

4.현재 master 브랜치에 master.txt라는 파일을 하나 더 만들고, 빔에서 'master 2'라는 내용을 입력하고 저장합니다.그리고 'master work 2'라는 메시지와 함께 커밋해줍니다.

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

5.이제 O2 브랜치로 체크아웃 해줍니다.

$ git checkout o2

6.o2 브랜치에서 o2.txt라는 파일을 만들고 'o2 2'라는 내용을 저장해줍니다.
o2.txt는 'o2 work 2'라는 메시지와 함께 커밋해줍니다.

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

7.git log 명령을 사용해서 현재 커밋의 상태를 확인해 봅니다.

  • 커밋 'work 1'은 master 브랜치와 o2 브랜치가 똑같이 가지고 있습니다.
  • 그다음으로 master 브랜치에는 'master work 2'커밋이 생겼고 o2 브랜치에는 'o2 work 2'커밋이 생겼습니다.
$ git log --oneline --branches --graph

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

  • 브랜치를 병합 하려면 먼저 master 브랜치로 체크아웃해야 합니다.
$ git checkout master

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

$ git merge o2

10.이때 자동으로 빔이 실행되면서 'merge branch ow'라는 커밋 메시지가 나타납니다.

  • 브랜치를 병합하면서 만들어지는 커밋의 메시지 입니다.
  • 커밋 메시지를 수정할 수도 있고, 자동메시지를 그대로 사용해도 됩니다.
  • esc를 누르고 ':wq'를 입력해 내용을 저장한 뒤 편집기를 종료해줍니다.

11.ls -al 명령을 상요해 확인해 보면 o2브랜치에 있던 o2.txt 파일이 master 브랜치에 합쳐집니다.

12.git log --oneline --branches --graph 명령으로 브랜치와 커밋들이 어떻게 병합되었는지 확인할 수 있습니다.

  • 'o2 work 2'커밋이 master 브랜치에 병합되면서 'Merge branch o2'라는 커밋이 새로 생겼습니다.
  • 두 브랜치에서 서로 다른 파일을 병합하는 겨우 이렇게 간단하게 해결할 수 있습니다.

병합이 끝난 브랜치 삭제하기

  • 브랜치를 병합한 후 더 이상 사용하지 않는 브랜치는 깃에서 삭제할 수 있습니다.
  • 단, 이렇게 브랜치를 삭제하더라도 이 브랜치가 완전히 지워지는 것이 아니라 다시 같은 이름의 브랜치를 만들면 예전 내용을 다시 볼 수 있습니다.

1.git branch 명령을 사용하면 현재 저장소에 어떤 브랜치가 있는지 확인할 수 있었습니다.

  • 현재 master ,o2 브랜치가 있습니다.
$ git branch

2.저장소의 기본 브랜치는 master 이므로 브랜치를 삭제하려면 master 브랜치에서 해야합니다.

  • 만약 현재 브랜치가 master 브랜치가 아니라면 master 브랜치로 checkout해야합니다.
  1. 브랜치를 삭제할 때는 git branch명령에 -d 옵션을 사용합니다.
  • master 브랜치에 병합하지 않은 브랜치를 삭제하려면 오류 메시지가 나타납니다.
  • 이럴 경우 옵션 -d 대신 -D를 사용하여 강제로 삭제할 수 있습니다.
$ git branch -d o2

4.삭제한 브랜치는 같은 이름으로 다시 브랜치를 만들면 예전에 작업했던 내용이 그대로 나타납니다.

  • 즉, 브랜치를 삭제한다는 것은 완전히 저장소에서 없애는 것이 아니라 깃의 흐름 속에서 감추는 것이라고 생각하면 됩니다.

좋은 웹페이지 즐겨찾기