[1] Branch
Git์์ Branch๋ผ๋ ๊ฐ๋
์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ฌ์ค์ ๋ฒ์ ๊ด๋ฆฌ์ ๊ฝ์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค.
(1) Branch๋?
โข
Branch๋ ๋๋ญ๊ฐ์ง๋ผ๋ ๋ป์ ์์ด ๋จ์ด์
๋๋ค.
โข
์ฆ ๋ธ๋์น๋ ๋๋ญ๊ฐ์ง์ฒ๋ผ ์ฌ๋ฌ ๊ฐ๋๋ก ์์
๊ณต๊ฐ์ ๋๋์ด ๋
๋ฆฝ์ ์ผ๋ก ์์
ํ ์ ์๋๋ก ๋์์ฃผ๋ Git์ ๋๊ตฌ์
๋๋ค.
โข
์ฅ์
1.
๋ธ๋์น๋ ๋
๋ฆฝ ๊ณต๊ฐ์ ํ์ฑํ๊ธฐ ๋๋ฌธ์ ์๋ณธ(master)์ ๋ํด ์์ ํฉ๋๋ค.
2.
ํ๋์ ์์
์ ํ๋์ ๋ธ๋์น๋ก ๋๋์ด ์งํ๋๋ฏ๋ก ์ฒด๊ณ์ ์ธ ๊ฐ๋ฐ์ด ๊ฐ๋ฅํฉ๋๋ค.
3.
ํนํ๋ Git์ ๋ธ๋์น๋ฅผ ๋ง๋๋ ์๋๊ฐ ๊ต์ฅํ ๋น ๋ฅด๊ณ , ์ฉ๋๋ ์ ๊ฒ ๋ญ๋๋ค.
โข
๊ทธ๋๋ ๋ธ๋์น ๊ผญ ์จ์ผํ๋์?
1.
์ผ๋จ master ๋ธ๋์น๋ ์์ฉ์ ์๋ฏธํฉ๋๋ค. ๊ทธ๋์ ์ธ์ ๋ ์ธ์์ ๊ณต๊ฐ๋์ด ์์ต๋๋ค.
2.
๋ง์ฝ ์์ฉ์ ์๋ฌ๊ฐ ์์ด์ ๊ณ ์ณ์ผ ํ๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น์?
3.
๊ณ ๊ฐ๋ค์ด ์ฌ์ฉํ๊ณ ์๋๋ฐ, ํจ๋ถ๋ก ๋ฒ์ ์ ๋๋๋ฆฌ๊ฑฐ๋ ์ญ์ ํ ์ ์์๊น์?
4.
๋ฐ๋ผ์ ๋ธ๋์น๋ฅผ ํตํด ๋ณ๋์ ์์
๊ณต๊ฐ์ ๋ง๋ค๊ณ , ๊ทธ๊ณณ์์ ๋๋๋ฆฌ๊ฑฐ๋ ์ญ์ ๋ฅผ ํฉ๋๋ค.
5.
๋ธ๋์น๋ ์์ ํ๊ฒ ๋
๋ฆฝ์ด ๋์ด์์ด์ ์ด๋ค ์์
์ ํด๋ master์๋ ์ํฅ์ ๋ผ์น์ง ๋ชปํ์ฃ .
6.
๊ทธ๋ฆฌ๊ณ ์ดํ์ ์๋ฌ๋ฅผ ํด๊ฒฐํ๋ค๋ฉด? ๊ทธ ๋ด์ฉ์ master์ ๋ฐ์ํ ์๋ ์์ต๋๋ค!
7.
์ด๋ฌํ ์ด์ ๋๋ฌธ์ Git์์ ๋ธ๋์น๋ ์ ๋ง ๊ฐ๋ ฅํ ๊ธฐ๋ฅ ์ค์ ํ๋๋ผ๊ณ ํ ์ ์์ต๋๋ค.
(2) git branch
๋ธ๋์น ์กฐํ, ์์ฑ, ์ญ์ ๋ฑ ๋ธ๋์น์ ๊ด๋ จ๋ Git ๋ช
๋ น์ด
# ๋ธ๋์น ๋ชฉ๋ก ํ์ธ
$ git branch
# ์๊ฒฉ ์ ์ฅ์์ ๋ธ๋์น ๋ชฉ๋ก ํ์ธ
$ git branch -r
# ์๋ก์ด ๋ธ๋์น ์์ฑ
$ git branch <๋ธ๋์น ์ด๋ฆ>
# ํน์ ์ปค๋ฐ ๊ธฐ์ค์ผ๋ก ๋ธ๋์น ์์ฑ
$ git branch <๋ธ๋์น ์ด๋ฆ> <์ปค๋ฐ ID>
# ํน์ ๋ธ๋์น ์ญ์
$ git branch -d <๋ธ๋์น ์ด๋ฆ> # ๋ณํฉ๋ ๋ธ๋์น๋ง ์ญ์ ๊ฐ๋ฅ
$ git branch -D <๋ธ๋์น ์ด๋ฆ> # (์ฃผ์) ๊ฐ์ ์ญ์ (๋ณํฉ๋์ง ์์ ๋ธ๋์น๋ ์ญ์ ๊ฐ๋ฅ)
Bash
๋ณต์ฌ
(3) git switch
ํ์ฌ ๋ธ๋์น์์ ๋ค๋ฅธ ๋ธ๋์น๋ก HEAD๋ฅผ ์ด๋์ํค๋ ๋ช
๋ น์ด
HEAD๋ ํ์ฌ ๋ธ๋์น๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๋ฅผ ์๋ฏธํฉ๋๋ค.
# ๋ค๋ฅธ ๋ธ๋์น๋ก ์ด๋
$ git switch <๋ค๋ฅธ ๋ธ๋์น ์ด๋ฆ>
# ๋ธ๋์น๋ฅผ ์๋ก ์์ฑ๊ณผ ๋์์ ์ด๋
$ git switch -c <๋ธ๋์น ์ด๋ฆ>
# ํน์ ์ปค๋ฐ ๊ธฐ์ค์ผ๋ก ๋ธ๋์น ์์ฑ๊ณผ ๋์์ ์ด๋
$ git switch -c <๋ธ๋์น ์ด๋ฆ> <์ปค๋ฐ ID>
Bash
๋ณต์ฌ
git switch ํ๊ธฐ ์ ์, ํด๋น ๋ธ๋์น์ ๋ณ๊ฒฝ ์ฌํญ์ ์ปค๋ฐ ํ์
จ๋์?
master ๋ธ๋์น์ feature ๋ธ๋์น๊ฐ ์๋ค๊ณ ๊ฐ์ ํด๋ณด๊ฒ ์ต๋๋ค.
feature ๋ธ๋์น์์ test.txt๋ฅผ ๋ง๋ค๊ณ git commit ํ์ง ์์ ์ํฉ์์
master ๋ธ๋์น๋ก ์ด๋ํ๊ฒ ๋๋ฉด, test.txt ํ์ผ์ด ๊ทธ๋๋ก ๋จ์์์ต๋๋ค.
๋ฐ๋ผ์ ๋ธ๋์น๋ฅผ ์ด๋ํ๊ธฐ ์ ์, ๊ผญ ์ปค๋ฐ์ ์๋ฃํ๊ณ ์ด๋ํ๋๋ก ํฉ๋๋ค.
[2] Branch scenario
git branch์ git switch๋ฅผ ํตํด ๋ธ๋์น๋ฅผ ์กฐํ, ์์ฑ, ์ด๋ํ๋ ์ค์ต์ ์งํํฉ๋๋ค.
(1) ์ฌ์ ์ธํ
1.
ํ ๋๋ ํ ๋ฆฌ์ git-branch-practice ํด๋๋ฅผ ์์ฑํ๊ณ ์ด๋ ํ vscode๋ฅผ ์ฝ๋๋ค.
$ mkdir git-branch-practice
$ cd git-branch-practice
$ code .
Bash
๋ณต์ฌ
2.
Git ์ ์ฅ์๋ฅผ ์์ฑํฉ๋๋ค.
$ git init
Initialized empty Git repository in C:/Users/kyle/git-branch-practice/.git/
Bash
๋ณต์ฌ
3.
test.txt๋ฅผ ์์ฑํ๊ณ ๊ฐ๊ฐ master-1, master-2, master-3 ์ด๋ผ๋ ๋ด์ฉ์ ์์๋๋ก ์
๋ ฅํ์ฌ ์ปค๋ฐ 3๊ฐ๋ฅผ ์์ฑํฉ๋๋ค.
$ touch test.txt
test.txt์ master-1 ์์ฑ
$ git add .
$ git commit -m "master-1"
test.txt์ master-2 ์์ฑ
$ git add .
$ git commit -m "master-2"
test.txt์ master-3 ์์ฑ
$ git add .
$ git commit -m "master-3"
Bash
๋ณต์ฌ
4.
git log --oneline์ ์
๋ ฅํ์ ๋ ์๋์ ๊ฐ์ด ๋์์ผ ์ ์์
๋๋ค.
์ด 3๊ฐ์ ๋ฒ์ ์ด master ๋ธ๋์น์ ๋ง๋ค์ด์ก์ต๋๋ค.
$ git log --oneline
0604dcd (HEAD -> master) master-3
9c22c89 master-2
3d71510 master-1
Bash
๋ณต์ฌ
5.
ํ์ฌ๊น์ง ๊ฒฐ๊ณผ
(2) ๋ธ๋์น ์์ฑ, ์กฐํ
1.
ํ์ฌ ์์น(master ๋ธ๋์น์ ์ต์ ์ปค๋ฐ)์์ login์ด๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ธ๋์น๋ฅผ ์์ฑํฉ๋๋ค.
$ git branch login
Bash
๋ณต์ฌ
2.
login๋ธ๋์น๊ฐ ์ ์์ฑ๋์๋์ง ํ์ธํฉ๋๋ค.
* master์ ์๋ฏธ๋ ํ์ฌ HEAD๊ฐ ๊ฐ๋ฆฌํค๋ ๋ธ๋์น๋ master๋ผ๋ ๊ฒ์
๋๋ค.
$ git branch
login
* master
Bash
๋ณต์ฌ
3.
git log --oneline์ ์
๋ ฅํ์ ๋ ์๋์ ๊ฐ์ด ๋์์ผ ์ ์์
๋๋ค.
0604dcd ์ปค๋ฐ ๊ธฐ์ค์ผ๋ก master์ login๋ธ๋์น๊ฐ ์์นํ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
$ git log --oneline
0604dcd (HEAD -> master, login) master-3
9c22c89 master-2
3d71510 master-1
Bash
๋ณต์ฌ
4.
master ๋ธ๋์น์์ 1๊ฐ์ ์ปค๋ฐ์ ๋ ์์ฑํฉ๋๋ค.
test.txt์ master-4 ์์ฑ
$ git add .
$ git commit -m "master-4"
Bash
๋ณต์ฌ
5.
ํ์ฌ๊น์ง ๊ฒฐ๊ณผ
(3) ๋ธ๋์น ์ด๋
1.
ํ์ฌ ๋ธ๋์น์ ์ปค๋ฐ์ ์ํ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ git log --oneline
5ca7701 (HEAD -> master) master-4
0604dcd (login) master-3
9c22c89 master-2
3d71510 master-1
Bash
๋ณต์ฌ
2.
์ด๋ login๋ธ๋์น๋ก ์ด๋ํ๋ฉด ์ด๋ค ์ผ์ด ์ผ์ด๋ ๊น์?
$ git switch login
Bash
๋ณต์ฌ
master ๋ธ๋์น์ test.txt์ ์์ฑํ master-4๊ฐ ์ง์์ก์ต๋๋ค!!
# login ๋ธ๋์น์ test.txt
master-1
master-2
master-3
Bash
๋ณต์ฌ
3.
๊ทธ๋ฆฌ๊ณ git log --oneline์ ์
๋ ฅํ๋ฉด ์๋์ ๊ฐ์ด ๋ํ๋ฉ๋๋ค.
์ด์ HEAD๋ login ๋ธ๋์น๋ฅผ ๊ฐ๋ฆฌํค๊ณ , master ๋ธ๋์น๊ฐ ๋ณด์ด์ง ์์ต๋๋ค.
$ git log --oneline
0604dcd (HEAD -> login) master-3
9c22c89 master-2
3d71510 master-1
Bash
๋ณต์ฌ
4.
master ๋ธ๋์น๋ ์ญ์ ๋ ๊ฑธ๊น์?
์๋๋๋ค! ๋ธ๋์น๋ฅผ ์กฐํ ํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋ํ๋ฉ๋๋ค.
HEAD๊ฐ login ๋ธ๋์น๋ฅผ ๊ฐ๋ฆฌํค๋ฉด์, log๋ login ๋ธ๋์น ๊ธฐ์ค์ผ๋ก ๋ณด์ด๋ ๊ฒ์ด์์ต๋๋ค.
$ git branch
* login
master
Bash
๋ณต์ฌ
5.
git log --oneline --all์ ์
๋ ฅํ๋ฉด ๋ชจ๋ ๋ธ๋์น์ ๋ก๊ทธ๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
$ git log --oneline --all
5ca7701 (master) master-4
0604dcd (HEAD -> login) master-3
9c22c89 master-2
3d71510 master-1
Bash
๋ณต์ฌ
6.
ํ์ฌ๊น์ง ๊ฒฐ๊ณผ
์ฆ ๋ธ๋์น๋ฅผ ์ด๋ํ๋ค๋๊ฑด HEAD๊ฐ ํด๋น ๋ธ๋์น๋ฅผ ๊ฐ๋ฆฌํจ๋ค๋ ๊ฒ์ ์๋ฏธํ๊ณ
๋ธ๋์น๋ ์ต์ ์ปค๋ฐ์ ๊ฐ๋ฆฌํค๋ฏ๋ก, HEAD๊ฐ ํด๋น ๋ธ๋์น์ ์ต์ ์ปค๋ฐ์ ๊ฐ๋ฆฌํค๊ฒ ๋ฉ๋๋ค.
๋ฐ๋ผ์ ์ํน ๋๋ ํ ๋ฆฌ์ ๋ด์ฉ๋ HEAD๊ฐ ๊ฐ๋ฆฌํค๋ ๋ธ๋์น์ ์ต์ ์ปค๋ฐ ์ํ๋ก ๋ณํํฉ๋๋ค.
(4) login ๋ธ๋์น์์ ์ปค๋ฐ ์์ฑ
1.
test.txt ํ์ผ์ login-1์ด๋ผ๊ณ ์์ฑํฉ๋๋ค.
# login ๋ธ๋์น์ test.txt
master-1
master-2
master-3
login-1
Bash
๋ณต์ฌ
2.
์ถ๊ฐ์ ์ผ๋ก test_login.txt๋ ์์ฑํ๊ณ login-1์ด๋ผ๊ณ ์์ฑํด๋ด
์๋ค.
$ touch test_login.txt
# ์ดํ test_login.txt์ ์์ฑ
login-1
Bash
๋ณต์ฌ
3.
์ปค๋ฐ์ ์์ฑํฉ๋๋ค.
$ git add .
$ git commit -m "login-1"
Bash
๋ณต์ฌ
4.
git log --oneline --all --graph๋ฅผ ํตํด ์๋์ ๊ฐ์ ๋ด์ฉ์ ํ์ธํฉ๋๋ค.
master ๋ธ๋์น์ login ๋ธ๋์น๊ฐ ๋ค๋ฅธ ๊ฐ๋๋ก ๊ฐ๋ผ์ง ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
$ git log --oneline --graph --all
* 3b0a091 (HEAD -> login) login-1
| * 5ca7701 (master) master-4
|/
* 0604dcd master-3
* 9c22c89 master-2
* 3d71510 master-1
Bash
๋ณต์ฌ
5.
ํ์ฌ๊น์ง ๊ฒฐ๊ณผ