[Git] 브랜치1-(만들기)
브랜치란?
고객과 협의를 거쳐서 웹 사이트를 개발하고 완성했는데 고객이 새로운 기능 추가를 요구했다고 가정해봅니다.
단순히 기존 파일에 새로운 기능을 위한 소스를 추가해서 새로운 버전으로 업데이트를 해야할까????..
근데 여기서 생각해 볼게 있습니다.
만약 새로운 기능을 추가했을 때 오류 없이 완벽하게 동작한다는 보장이 없다면..??
그러기 위해서 제대로 동작하는 소스는 그대로 둔 채 새 소스를 추가한 버전을 따로 만들어 관리 해야합니다.
그리고 오류없이 완성한 다음 원래 소스에 더할 수 있다면 엄청 편리할 것입니다..
이럴 때 사용하는 방법이 깃의 '브랜치(branch)'라는 기능입니다.
branch 기능
- 깃으로 버전 관리를 시작하면 기본적으로 master 라는 브랜치가 만들어 집니다.
- 사용자가 commit 할 때 마다 master브랜치는 최신 커밋을 가리킵니다.
- 즉, 브랜치는 커밋을 가리키는 포인터와 비슷하다고 생각하면 됩니다.
branch(분기)
- 기존에 저장한 파일을 master 브랜치에 그대로 유지하면서 기존 파일 내용을 수정하거나 새로운 기능을 구현할 파일을 만들 수 있습니다.
- 이렇게 master 브랜치에서 뻗어 나오는 새 브랜치를 만드는 것을 '분기(branch)'라고 합니다.
- 새 브랜치에서 원하는 작업을 다 끝냈다면 새 브랜치에 있던 파일을 원래 master 브랜치에 합칠 수 있습니다.
- 이렇게 분기했던 브랜치를 master브랜치에 합치는 것을
'병합(merge)한다.'라고 합니다.
branch 만들기
'병합(merge)한다.'라고 합니다.
1.터미널 창을 열어 홈 디렉토리에 manual이라는 새 디렉토리를 만들고 해당 디렉토리로 이동합니다.
$ mkdir manual
$ cd manual
2.manual 디렉토리를 저장소로 만들고 ls -al 명령어를 사용해서 .git 디렉토리가 만들어 졌는지 확인합니다.
$ git init
$ ls -al
3.manual 디렉토리 안에 work.txt파일을 만들어 봅니다.터미널에 빔을 열고 "content 1"이라는 내용을 입력한 후에 저장해줍니다.
$ vim work.txt
4.방금 만든 work.txt파일을 스테이지에 올리고 커밋합니다.
커밋 메시지는 간단하게 'work1'이라고 해줍니다.
$ git add work.txt
$ git commit -m "work 1"
5.커밋이 완료되면 다음과 같이 입력해서 커밋 내역을 확인해 봅니다.
$ git log
6.work.txt파일을 두번 더 커밋해 봅니다.먼저 work.txt파일에 'content 2'를 추가해준 후에 'work 2'라는 메시지와 함께 커밋해줍니다.
$ vim work.txt
$ git commit -am "work 2"
7.그리고 work.txt 파일에 'content3'를 추가한 후 'work 3'라는 메시지와 함께 커밋합니다.
$ vim work.txt
$ git commit -am "work 3"
8. commit이 끝나면 'git log'를 입력해서 커밋내역을 확인해봅니다.
commit message가 'work 1','work 2','work 3'인 커밋들이 보여야 합니다.
9.master 브랜치가 가장 최신 커밋인 'work 3'를 가리키고 있고, HEAD가 master 브랜치를 가리키고 있습니다.
HEAD는 여러 브랜치 중에서 현재 작업 중인 브랜치를 가리킵니다.
- 여기까지가 초기 사용 설명서를 만드는 작업이었다고 가정하겠습니다.
이제부터 여러 고객사에서 서로 다른 내용의 사용 설명서를 제공해야 하는 상황입니다.
브랜치를 사용하지 않는다고 한다면 각 고객사 디렉토리를 만들고 manual 디렉토리를 복사해서 사용해야 합니다.
그러나 브랜치를 사용한다면 간단하게 처리할 수 있습니다.
새 브랜치 만들기
- 이제부터 직접 브랜치를 만들면서 위와 같은 문제를 어떻게 처리하는지 알아봅니다.
- 여기에서는 apple,google,ms라는 고객사가 있다고 가정해 보겠습니다.
1.깃에서 브랜치를 만들거나 확인하는 명령어는 'git branch'입니다.
$ git branch
2.master라고 나타납니다.
master는 특별한 브랜치 입니다.
저장소를 만들 떄 기본적으로 master 브랜치가 만들어 집니다.
그동안 master브랜치에서 작업하고 있었던 것입니다.
3.새로운 브랜치를 만들려면 git branch 명령 다음에 만들려는 브랜치 이름을 적습니다.고객사인 apple의 브랜치를 만들어 줍니다.
$ git branch apple
4.apple 브랜치가 만들어져도 화면에는 아무것도 나타나지 않습니다.
apple 브랜치가 제대로 만들어 졌는지 확인하기 위해서 확인해줍니다.
*표시는 아직 master 브랜치에서 작업하고 있다는 뜻입니다.
- 브랜치가 추가된 후에는 커밋 로그 화면도 다르게 나타납니다. git log 명을 사용해 커밋을 확인해봅니다.
6.그동안 커밋 로그를 확인할 때 (HEAD -> master)라고 표시됬던 곳에 apple 브랜치가 추가되면서 (HEAD -> master,apple)로 바뀌었습니다.
이 표시는 저장소에 master,apple 2개의 브랜치가 있고,HEAD -> master이므로 현재 작업 중인 브랜치는 master 브랜치라는 의미 입니다.
7.앞에서와 같은 방법으로 google 브랜치와 ms 브랜치를 만들어 봅니다. 그리고 git branch 명령으로 저장소 안에 있는 모든 브랜치를 확인해 봅니다.
$ git branch google
$ git branch ms
$ git branch
브랜치 사이 이동하기 - git checkout
- 브랜치를 여러개 만들었다면 각 브랜치를 오가면서 작업할 수 있어야 합니다.
1.git.log로 확인해 보면 master브랜치를 비롯해 ms,google,apple 브랜치가 'work 3'커밋 상태에서 만들어진 것을 알 수 있습니다.
즉, 이것은 master 브랜치 뿐만 아니라 ms,google,apple 브랜치에도 최신 커밋이 'work 3'라는 뜻입니다.
2.*로 인해 지금 master 브랜치에 있다는 것을 알고 있습니다.
커밋을 하나 만들어서 어떻게 달라지는지 확인해 봅니다.
work.txt 파일안에 'master content 4'라는 내용을 추가한 후 'master content 4'라는 메시지와 함께 커밋해 보겠습니다.
$ vim work.txt
$ git commit -am "master content 4"
3.master 브랜치에 새로운 커밋이 추가되었는데 로그가 바뀌었습니다.
git log명령에 --oneline 옵션을 추가해서 확인해 봅니다.
--oneline옵션은 한 줄에 한 커밋씩 나타내 주기 때문에 커밋을 간략하게 확인할 때 사용합니다.
- 최신 커밋인 'master content 4'는 master 브랜치에만 적용되어 있습니다. ms,google,apple 브랜치는 아직 'work 3'커밋 상태입니다.
5.현재 브랜치(master)에서 다른 브랜치를 이동하면 어떻게 변하는지를 살펴보겠습니다.
다른 브랜치로 이동하려면 git checkout 명령 다음에 브랜치 이름을 사용합니다.
다음과 같이 입력해서 apple 브랜치로 체크아웃해봅니다.
$ git checkout apple
6.작업 브랜치를 apple 브랜치로 바꿨을 때 어떤 변화가 생기는지 확인해 보겠습니다.
git log 명령을 사용해서 현재 브랜치의 커밋 로그를 확인해봅니다.
$ git log --oneline
7.master 브랜치에서 apple 브랜치를 분기하기 전까지 master 브랜치에 있던 커밋들은 그대로 apple브랜치에 복사된 것을 확인할 수 있습니다.
그리고 최신 커밋 해쉬에서 HEAD가 apple을 가리키고 있습니다.
즉, apple 브랜치의 최신 커밋은 처음 분기될 때인 'work 3'커밋 그대로 입니다.
그렇다면 work.txt파일에는 무었이 있는지 cat 명령을 사용하여 확인해 봅니다.
8.최신 커밋이 work3 이기 때문에 content1 부터 content3까지 세 개의 행만 있습니다.
master브랜치에서 입력했던 'master content 4'가 없습니다.
이를 통해 apple브랜치가 master 브랜치에서 분기된 이후에 master브랜치에 추가된 커밋은 apple 브랜치에 영향을 미치지 않았단 것을 알 수 있습니다.
Author And Source
이 문제에 관하여([Git] 브랜치1-(만들기)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jyyoun1022/Git-브랜치1-만들기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)