๋ค์ด๊ฐ๋ฉฐ
์ด๋ฒ ํฌ์คํ
์๋ git
์ ํต์ฌ์ด๋ผ๊ณ ๋ณผ ์ ์๋ ์ต๋ ์ฅ์ ์ธ branch
์ ๋ํด ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํฉ๋๋ค.
์ฌ๋ฌ ์ฌ๋์ด ๊ฐ์ด ๊ฐ๋ฐ์ ํ ๋์ ์ฝ๋๋ฅผ ํต์งธ๋ก ๋ณต์ฌํ๊ณ ๋์ ์๋์ ์ฝ๋์ ์๊ด์์ด ๋
๋ฆญ์ ์ผ๋ก ๊ฐ๋ฐ์ ์งํํ ์ ์๋๋ฐ, ์ด๋ ๊ฒ ๋
๋ฆฝ์ ์ผ๋ก ๊ฐ๋ฐํ๋ ๊ฒ์ด branch
์ด๊ณ ๋ชจ๋ ๋ฒ์ ๊ด๋ฆฌ ์ํธํ
์ branch
๋ฅผ ์ง์ํฉ๋๋ค.
git
์ branch
๋ ๋งค์ฐ ๊ฐ๋ฒผ์์ ๋ค๋ฅธ ๋ฒ์ ๊ด๋ฆฌ ์์คํ
๊ณผ๋ ๋ค๋ฅด๊ฒ git
์ branch
๋ฅผ ์ฝ๊ฒ ๋ง๋ค์ด ์์
ํ๊ณ ๋์ค์ merge
ํ๋ ๋ฐฉ๋ฒ์ ๊ถ์ฅํฉ๋๋ค.
branch๋ ๋ฌด์์ธ๊ฐ?
Git
์ด branch
๋ฅผ ๋ค๋ฃจ๋ ๊ณผ์ ์ ์ดํดํ๋ ค๋ฉด ์ฐ์ git
์ด ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ์ ์ฅํ๋์ง ์์์ผํฉ๋๋ค.
git
์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝ์ฌํญ(diff
)๋ก ๊ธฐ๋กํ์ง ์๊ณ ์ผ๋ จ์ ์ค๋
์ท์ผ๋ก ๊ธฐ๋กํฉ๋๋ค.
commit
ํ๋ฉด git
์ ํ staging area
์ ์๋ ๋ฐ์ดํฐ์ ์คํญ์ท์ ๋ํ pointer
, author
, message
์ ๊ฐ์ ๋ฉํ ๋ฐ์ดํฐ, ์ด์ ์ปค๋ฐ์ ๋ํ ํฌ์ธํฐ๋ฑ์ ํฌํจํ๋ ์ปค๋ฐ ๊ฐ์ฒด(commit object
)๋ฅผ ์ ์ฅํฉ๋๋ค.
git commmit
์ผ๋ก ์ปค๋ฐํ๋ฉด ๋จผ์ root directory
์ ๊ฐ ํ์ directory
์ tree
๊ฐ์ฒด๋ฅผ ์ฒดํฌ์ฌ๊ณผ ํจ๊ป ์ ์ฅ์์ ์ ์ฅํฉ๋๋ค.
๊ทธ ๋ค์์ ์ปค๋ฐ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ๋ฉํ๋ฐ์ดํฐ์ ๋ฃจํธ ๋๋ ํ ๋ฆฌ ํธ๋ฆฌ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ ์ ๋ณด๋ฅผ ์ปค๋ฐ ๊ฐ์ฒด์ ๋ฃ์ด ์ ์ฅํฉ๋๋ค.
์ด ์์
์ ๋ง์น๊ณ ๋๋ฉด git
์ ์ฅ์์๋ ๊ฐ ํ์ผ์ ๋ํ Blob
ํ์ผ, ํ์ผ๊ณผ ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ๊ฐ ๋ค์ด์๋ ํธ๋ฆฌ ๊ฐ์ฒด ํ๋, ๋ฉํ ๋ฐ์ดํฐ์ ๋ฃจํธ ํธ๋ฆฌ๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๊ฐ ๋ด๊ธด ์ปค๋ฐ ๊ฐ์ฒด ํ๋๊ฐ ์์ฑ๋ฉ๋๋ค.
์์ ์ด๋ฏธ์ง๋ฅผ ๋ณด๋ฉด ๊ฐ ์ค๋
์ท์ ์ด์ ์ commit
์ ์ค๋
์ท์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๊ฐ ์ ์ฅ๋์ด ์๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
์ ๋ธ๋์น ์์ฑํ๊ธฐ
$ git branch testing
๋ธ๋์น๋ฅผ ์๋ก ๋ง๋ค๋ฉด ์ง๊ธ ์์ ํ๊ณ ์๋ ๋ง์ง๋ง ์ปค๋ฐ์ ๊ฐ๋ฆฌํต๋๋ค.
๊ทธ๋ ๋ค๋ฉด ํ์ฌ ์์
์ค์ธ ๋ธ๋์น๊ฐ ๋ฌด์์ธ์ง git
์ ์ด๋ป๊ฒ ํ์
ํ ๊น์ ?
๋ค๋ฅธ ๋ฒ์ ๊ด๋ฆฌ ์์คํ
๊ณผ๋ ๋ฌ๋ฆฌ git
์ HEAD
๋ผ๋ ํน์ํ ํฌ์ธํฐ๊ฐ ์์ต๋๋ค. ์ด ํฌ์ธํฐ๋ ์ง๊ธ ์์
ํ๋ ๋ก์ปฌ ๋ธ๋์น๋ฅผ ๊ฐ๋ฆฌํต๋๋ค.
์ฆ, git branch
๋ช
๋ น์ด๋ ๋ธ๋์น๋ฅผ ์์ฑ๋ง ํ ๋ฟ์ด์ง ์์
ํ๋ ๋ธ๋์น๋ฅผ ๋ฐ๊พธ์ง ์์ต๋๋ค.
$ git checkout testing
์์ ๋ช
๋ น์ด๋ฅผ ์คํํ๋ฉด HEAD
๋ testing
๋ธ๋์น๋ฅผ ๊ฐ๋ฆฌํต๋๋ค.
์ปค๋ฐ์ ์๋ก ํด๋ณด๊ฒ ์ต๋๋ค!
$ vim test.rb
$ git add test.rb
$ git commit -m 'made a change'
์๋ก ์ปค๋ฐํด์ testing
๋ธ๋์น๋ ์์ผ๋ก ์ด๋ํ์ต๋๋ค. ํ์ง๋ง master
๋ธ๋์น๋ ์ฌ์ ํ ์ด์ ์ปค๋ฐ์ ๊ฐ๋ฆฌํต๋๋ค.
$ git checkout master
์์ ๋ช
๋ น์ด๋ master ๋ธ๋์น๊ฐ ๊ฐ๋ฆฌํค๋ commit
์ HEAD
๊ฐ ๊ฐ๋ฆฌํค๊ฒ ํ๊ณ working directory
์ ํ์ผ๋ ๊ทธ ์์ ์ผ๋ก ๋๋๋ ค ๋์์ต๋๋ค.
์์ผ๋ก commit
์ ํ๊ฒ๋๋ฉด ๋ค๋ฅธ ๋ธ๋์น์ ์์
๋ค๊ณผ ๋ณ๊ฐ๋ก ์งํ๋๊ธฐ ๋๋ฌธ์ testing
๋ธ๋์น์์ ์์
ํ๊ณ ์์๋ค๋ฉด add
๋ก stage
์ ์ฌ๋ ค๋๊ณ commit
์ ํ๊ณ ๋ค๋ฅธ ๋ธ๋์น๋ก ์ด๋ํ์ฌ ๋ค๋ฅธ ์ผ์ ์งํ ํ ์๋ ์์ต๋๋ค.
branch์ merge์ ๊ธฐ์ด
๋ณดํต ๋ธ๋์น์ merge
๋ ์๋์ ๊ฐ์ด ์งํํฉ๋๋ค.
- ์๋ก์ด ์ด์๋ฅผ ์ฒ๋ฆฌํ ์
branch
๋ฅผ ๋ง๋ ๋ค. - ์๋ก ๋ง๋
branch
์์ ์์ ์ ์งํํ๋ค.
ํ์ง๋ง ์ด์๋ ๋ณ๊ฐ๋ก ์ค์ํ ๋ฌธ์ ๊ฐ ์๊ฒจ์ ๊ทธ๊ฒ์ ํด๊ฒฐํ๋ hotfit
๋ฅผ ๋จผ์ ๋ง๋ค์ด์ผํฉ๋๋ค.
- ์๋ก์ด ์ด์๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ด์ ์ ์ด์ ๋ธ๋์น๋ก ์ด๋ํ๋ค.
hotfix
๋ธ๋์น๋ฅผ ํ๋ ์์ฑํ๋ค.- ์์ ํ
hotfix
๋ฅผ ์ด์ ๋ธ๋์น๋กmerge
ํ๋ค. - ๋ค์ ์์ ํ๋ ๋ธ๋์น๋ก ์ด๋ํ์ฌ ์ผ์ ์งํํ๋ค.
branch์ ๊ธฐ์ด
์ด๋ ๊ฒ ์งํ๋๊ณ ์๋ ํ๋ก์ ํธ์์ issue-53๋ฒ์ ์ฒ๋ฆฌํ๋ค๊ณ ๊ฐ์ ํด๋ด ์๋ค.
๊ทธ๋ผ ์ด ์ด์๋ฅผ ์ฒ๋ฆฌํ ๋ธ๋์น๋ฅผ ํ๋ ๋ง๋ญ๋๋ค. ๋ธ๋์น๋ฅผ ๋ง๋ค๋ฉด์ checkout
๊น์ง ํจ๊ปํ๊ธฐ ์ํด์ -b
์ต์
์ ์ฌ์ฉํฉ๋๋ค!
$ git checkout -b issue_53
์ด๋ ๊ฒ HEAD
๊น์ง ์์ฑ๋ ๋ธ๋์น์ธ issue-53
์ผ๋ก ์ด๋ํ์ผ๋ฉด ์ด์๋ฅผ ์ฒ๋ฆฌํด๋ณด๊ฒ ์ต๋๋ค.
$ vim index.html
$ git add index.html
$ git commit -m '[add] issue 53'
index.html
ํ์ผ์ ์ถ๊ฐํ๊ณ commit
์ ํ๋ฉดํด๋น ๋ธ๋์น๊ฐ ์์ผ๋ก ๋์๊ฐ๋๋ค.
ํ์ง๋ง ์ด๋ ๊ฒ ์ฝ๊ฒ ๋ธ๋์น๋ฅผ ์ด๋ํ๊ณ ์ฌ์ฉํ๋ ค๋ฉด ์ฃผ์ํด์ผํ ์ ์ด ์์ต๋๋ค.
์์ง ์ปค๋ฐํ์ง ์์ ํ์ผ์ด checkout
ํ ๋ธ๋์น์ ์ถฉ๋๋๋ฉด ๋ธ๋์น๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ์ฆ, ๋ธ๋์น๋ฅผ ๋ณ๊ฒฝํ ๋๋ working directory
๋ฅผ ์ ๋ฆฌํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
master
๋ธ๋์น๋ก ์ด๋ํด์ issue_53
๋ธ๋์น๋ฅผ Merge ํด๋ณด๊ฒ ์ต๋๋ค.
$ git checkout master
$ git merge issue_53
Merge
๋ฉ์์ง์์ fast-forward
๊ฐ ๋ณด์ผ ๊ฒ์
๋๋ค.
์ด ๋จ์ด์ ์๋ฏธ๋ A๋ธ๋์น
์์ B๋ธ๋์น
๋ก merge
ํ ๋ b๋ธ๋์น
๊ฐ a๋ธ๋์น
์ดํ์ commit
์ ๊ฐ๋ฆฌํค๊ณ ์์ผ๋ฉด ๊ทธ์ A๋ธ๋์น
๊ฐ B๋ธ๋์น
์ ๋์ผํ ์ปค๋ฐ์ ๊ฐ๋ฆฌํค๋๋ก ์ด๋์ํจ๋ค๋ผ๋ ๋ป์
๋๋ค.
์ด๋ ๊ฒ ํ๋ฉด ๊ฐ ๋ธ๋์น๊ฐ์ ์ํฅ์ ๋ผ์น์ง ์๋๋ค๋ ๊ฒ์ ์ดํดํ์ ์ผํฉ๋๋ค.
์๋ฅผ ๋ค์ด issue_53
๋ธ๋์น์์ ์์
์ ํ๋ ์ค master
๋ธ๋์น์ ์ค๋ฅ๊ฐ ์๊ฒจ hotfix
๋ธ๋์น๋ฅผ master
์์ ๋ง๋ค์ด์ ์์
ํ master
์ merge
ํ๊ฒ ๋์ด๋ issue_53
๋ธ๋์น์๋ ์ํฅ์ด ์๋ค๋ ๊ฒ์
๋๋ค.
๊ทธ ๋์ git merge master
๋ช
๋ น์ผ๋ก master
๋ธ๋์น๋ฅผ issue_53
๋ธ๋์น์ merge
ํ๋ฉด issue_53
๋ธ๋์น์ hotfix
๊ฐ ์ ์ฉ๋ฉ๋๋ค.