Git branch 개념 배우기 👇👇👇👇👇👇
https://myvelop.tistory.com/99?category=917184
1. 메인 브랜치와 새로운 브랜치 만들기
git branch를 사용하는 방법은 위 개념배우기에서 사용했던 시나리오를 그대로 사용하도록 하겠다.
- 메인 브랜치 만들기
$ git init
## 홈페이지 만들기 ##
$ touch 홈페이지.txt
$ git add .
$ git commit -m "홈페이지"
## 홈페이지 만들기 완료 ##
## 게시판 만들기 ##
$ touch 게시판.txt
$ git add .
$ git commit -m "게시판"
## 게시판 만들기 완료 ##
## 댓글 기능 만들기 ##
$ touch 댓글기능.txt
$ git add .
$ git commit -m "댓글기능"
## 댓글 기능 만들기 완료 ##
- 현재 브랜치 확인하기
$ git branch
* master
- 새로운 브랜치(my branch) 만들기
$ git branch my
## 브랜치 확인하기 ##
$ git branch
* master
my
git log를 해보면 master(main) 브랜치와 my 브랜치 포인터 모두 "댓글기능"을 가리키고 있다.
$ git log
commit ef1dcd4cc2990f5cb0f4905ace6d5fd3af5c34ef (HEAD -> master, my)
Author: BigBell <pythonstrup@gmail.com>
Date: Fri Feb 11 15:10:19 2022 +0900
댓글기능
commit 1c29e2db744723e7cef17b023dc569d4b735e76b
Author: BigBell <pythonstrup@gmail.com>
Date: Fri Feb 11 15:02:32 2022 +0900
게시판
commit 209cbcb14ed375770bbcc519f156c07748b4a953
Author: BigBell <pythonstrup@gmail.com>
Date: Fri Feb 11 15:01:38 2022 +0900
홈페이지
2. 브랜치 이동하기
브랜치를 이동할 땐 git checkout 명령어를 사용하면 된다.
----------------------------- /d/bigbell/gitworkspace/pratice_branch (master)
$ git checkout my
Switched to branch 'my'
----------------------------- /d/bigbell/gitworkspace/pratice_branch (my)
$
디렉토리 옆을 확인해보면 (master)에서 (my)로 바뀐 것을 확인할 수 있다.
아래 방식을 사용하면 my 브랜치를 만듦과 동시에 checkout을 할 수 있으니 참고하자.
$ git checkout -b my
3. fast-forward merge
- 1단계: 새로운 브랜치에 정보 추가
이제 my 브랜치에 커밋을 추가해보자. 파일 하나만 추가해보겠다.
- my 브랜치에 추가하기
$ touch 댓글추가기능.txt
$ git add .
$ git commit -m "댓글추가기능"
이제 깃로그를 확인해보자. 시나리오와 같이 main은 댓글 기능을 가르키고, my는 댓글 추가 기능을 가리키고 있다.
- 깃 로그 확인
$ git log
commit b44eaa1c61bf8bcb2cea363bbd48103d38dbf087 (HEAD -> my)
Author: BigBell <pythonstrup@gmail.com>
Date: Fri Feb 11 15:16:09 2022 +0900
댓글추가기능
commit ef1dcd4cc2990f5cb0f4905ace6d5fd3af5c34ef (master)
Author: BigBell <pythonstrup@gmail.com>
Date: Fri Feb 11 15:10:19 2022 +0900
댓글기능
- 2단계: 브랜치 합병하기
이제 master(main)으로 다시 이동하고 브랜치를 합병해보자(fast-forward merge 방식)
$ git checkout master
$ git merge my
다시 깃로그를 확인해보면 master와 my가 합쳐져있는 것을 확인할 수 있다!!
$ git log
commit b44eaa1c61bf8bcb2cea363bbd48103d38dbf087 (HEAD -> master, my)
Author: BigBell <pythonstrup@gmail.com>
Date: Fri Feb 11 15:16:09 2022 +0900
댓글추가기능
4. 3-way merge
이번에는 3-way merge 방식이다. 폴더를 새로 만들어서 1번(메인 브랜치와 새로운 브랜치 만들기)과 2번(브랜치 이동하기)을 다시 실행하자.
- 1단계: 새로운 브랜치에 정보 추가
이제 my branch인 상태로 파일을 추가해보자.
-my 브랜치에 추가
$ touch 댓글추가기능.txt
$ git add .
$ git commit -m "댓글추가기능"
깃로그를 확인해보면 아래와 같다.
$ git log
commit 537c826be068104017a65a8539f11255b09960f6 (HEAD -> my)
Author: BigBell <pythonstrup@gmail.com>
Date: Fri Feb 11 15:30:09 2022 +0900
댓글추가기능
commit 5025128dd5fd121dd5995efc475120ba8cdf7a97 (master)
Author: BigBell <pythonstrup@gmail.com>
Date: Fri Feb 11 15:26:50 2022 +0900
댓글기능
- 2단계: main 브랜치에 정보 추가
이제는 다시 master로 돌아와서 광고 기능을 추가해보도록 하겠다.
$ git checkout master
Switched to branch 'master'
$ touch 광고기능.txt
$ git add .
$ git commit -m "광고기능"
현재 HEAD는 main쪽에 있는 상태이다. main인 상태에서 git log 명령을 사용하면 my 브랜치 쪽의 포인터가 보이지 않는다.
$ git log
commit 05314a7352554e67b47fce3583bccbc6bad4241e (HEAD -> master)
Author: BigBell <pythonstrup@gmail.com>
Date: Fri Feb 11 15:33:28 2022 +0900
광고기능
commit 5025128dd5fd121dd5995efc475120ba8cdf7a97
Author: BigBell <pythonstrup@gmail.com>
Date: Fri Feb 11 15:26:50 2022 +0900
댓글기능
그렇다면 my 브랜치에 헤더가 있다면 어떻게 보일까? my쪽에서 체크아웃해서 깃로그를 확인해보면
역시나 main 브랜치 포인터가 식별되지 않는다.
$ git log
commit 537c826be068104017a65a8539f11255b09960f6 (HEAD -> my)
Author: BigBell <pythonstrup@gmail.com>
Date: Fri Feb 11 15:30:09 2022 +0900
댓글추가기능
commit 5025128dd5fd121dd5995efc475120ba8cdf7a97
Author: BigBell <pythonstrup@gmail.com>
Date: Fri Feb 11 15:26:50 2022 +0900
댓글기능
- 3단계: 브랜치 합병하기
이제 합병을 시도해보자
$ git merge my
merge 메시지를 남기라는 창이 뜰 것이다. 메시지를 남기지 않고 그냥 나오는 방법을 알려주겠다.
Merge branch 'my'
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.
- esc 누르기
- :wq 누르고 엔터 누르기
이제 다시 깃 로그를 확인해보자. master부분에 my가 합쳐진 것을 확인할 수 있고, my는 댓글추가기능에 그대로 존재하는 것을 확인할 수 있다.
$ git log
commit a1abfd06ed91062114d5af7d645c58cdc9ecf148 (HEAD -> master)
Merge: 05314a7 537c826
Author: BigBell <pythonstrup@gmail.com>
Date: Fri Feb 11 15:41:05 2022 +0900
Merge branch 'my'
commit 05314a7352554e67b47fce3583bccbc6bad4241e
Author: BigBell <pythonstrup@gmail.com>
Date: Fri Feb 11 15:33:28 2022 +0900
광고기능
commit 537c826be068104017a65a8539f11255b09960f6 (my)
Author: BigBell <pythonstrup@gmail.com>
Date: Fri Feb 11 15:30:09 2022 +0900
댓글추가기능
*** 추가 정보 ***
merge --squash 사용방법