[Git ์ฌํ] Git Branch ์ ๋๋ก ์๊ธฐ / Branch๋? / Merge ํด๋ณด๊ธฐ / Conflict ํด๊ฒฐํ๊ธฐ
Branch๋?
ํน์ ์ปค๋ฐ์ ๊ฐ๋ฆฌํค๋ 'ํฌ์ธํฐ'
๋ธ๋์น๋ ํ๋์ ํ๋ก์ ํธ์์ ์๋ก ๋ค๋ฅธ ๊ฐ๋ฐ ํ๋ฆ์ ๋ณ๋ ฌ์ ์ผ๋ก ๊ฐ์ ธ๊ฐ๊ธฐ ์ํด ์ฌ์ฉํจ.
์ฐ๋ฆฌ๊ฐ ์ด๋ค ํ๋ก์ ํธ๋ฅผ ๊น์ผ๋ก ๋ฒ์ ๊ด๋ฆฌ ํ๋ฉด ์ด๊ธฐ์ ์๋ ์ ํ ๋๋ ๊ธฐ๋ณธ ๋ธ๋์น = master ๋ธ๋์น
๊ทธ๋ฆฌ๊ณ ํค๋๋ ๋ณดํต ๋ธ๋์น๋ฅผ ํตํด ํน์ ์ปค๋ฐ์ ๊ฐ๋ฆฌํค๊ฒ ๋จ.
๋ณดํต master ๋ธ๋์น์๋ ์ค์ ์๋น์ค์ ๋ฐฐํฌํ ์ ๋๋ก ์์ฑ๋ ์ปค๋ฐ๋ค๋ง ๋๊ณ ,
์ฐ๋ฆฌ๊ฐ ๊ฐ๋ฐ์ ํ๋ฉด์ ๋ง๋ค์ด์ง ์ปค๋ฐ๋ค์ ๋ค๋ฅธ ๋ธ๋์น์ ๋๋ ๊ฒ์ด ์ข์.
Branch ์์ฑํ๊ธฐ
'git branch ๋ธ๋์น ์ด๋ฆ'์ ์ ๋ ฅํด์ฃผ๋ฉด ๋ธ๋์น ์์ฑ ์๋ฃ
- ๋ธ๋์น๋ฅผ ์๋ก ์์ฑํ๋ฉด ํค๋๊ฐ ๊ฐ๋ฆฌํค๋ ์ปค๋ฐ์ ๊ทธ๋๋ก ๊ฐ๋ฆฌํค๊ฒ ๋จ
$ git branch {branch_name}
Head๋ฅผ ๋ค๋ฅธ Branch๋ก ์ฎ๊ธฐ๊ธฐ
'git checkout ํค๋๋ก ๊ฐ๋ฆฌํค๊ณ ์ถ์ ๋ธ๋์น ์ด๋ฆ'์ ์ ๋ ฅํด์ฃผ๋ฉด ํค๋ ์ฎ๊ธฐ๊ธฐ ์๋ฃ
- ๋ณดํต head๊ฐ master ๋ธ๋์น๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๊ธฐ ๋๋ฌธ์,
head๋ฅผ ๋ค๋ฅธ ๋ธ๋์น๋ก ์ฎ๊ฒจ์ค์ผ ์๋ก ๋ง๋๋ ์ปค๋ฐ์ ๊ทธ ๋ธ๋์น๊ฐ ๊ฐ๋ฆฌํค๊ฒ ๋จ
$ git checkout {branch_name}
๋ณด์ด์ง ์๋ Branch๊น์ง ๋ชจ๋ ํ์ธํ๊ธฐ
--all : Head๊ฐ ๊ฐ๋ฆฌํค๋ ๋ธ๋์น ๋ฟ๋ง ์๋๋ผ, ๋ชจ๋ Branch๋ฅผ ๋ณด๊ฒ ๋ค
--branch : Branch์ Commit์ ๊ด๊ณ๋ฅผ ๊ทธ๋ํ ํ์์ผ๋ก๋ ๋ณด๊ฒ ๋ค
$ git log --all --graph
Merge ํด๋ณด๊ธฐ
์์ >>
์์ ๋ง๋ ๋ธ๋์น ์ด๋ฆ์ develop์ด๋ผ๊ณ ํ๊ณ , develop์์ ๋ ์๋ก์ด ์์ ํ๋ฆ์ ๋ง๋ค์ด ๋ณผ ๊ฒ์.
๊ฐ๋ฐ ํ์ ๋ ์ด์ฑ ๊ฒ์ ์ค Basic Car ํด๋์ค๋ฅผ ์์ ํ๋ ์์ ์ ๋ ๊ฐ์ ํ A, B๋ก ๋๋ ์ ์งํํจ.
๋ ์ด์ฑ ๊ฒ์์์๋ ์ฐจ๋์ด ์ฑ ๋์ ๊ณต๊ฒฉํ ์๋, ๋ฐฉ์ดํ ์๋ ์์.
์ด๋ ๊ณต๊ฒฉ์ ๋ด๋นํ๋ Attack Method์,
๋ฐฉ์ด๋ฅผ ๋ด๋นํ๋ Defend Method๋ฅผ ๊ฐ๊ฐ ๋ณ๊ฐ์ ์์ ์ผ๋ก ์งํํจ.
์ด๋ฅผ ์ํด์๋ ๊ฐ ์์ ์ ๋ณ๋์ ๋ธ๋์น(feature-attack, feature-defend)๋ฅผ ํ ๋นํ๋ฉด ๋จ.
์ด๋ ๊ฒ ๋ณ๋์ ๋ธ๋์น์์ ์์ ํ ๋ด์ฉ๋ค์ ํฉ์น๊ธฐ ์ํด์ ํ์ํ ์์ ์ด Merge์.
Merge๋ฅผ ํ๊ธฐ ์ํด์๋ ์ฐ์ ์์ ๋ธ๋์น์ธ develop์ผ๋ก ํค๋๋ฅผ ์ด๋์์ผ์ผ ํจ.
'git merge ํฉ์น๊ณ ์ถ์ ๋ธ๋์น๋ช '์ ํตํด merge
- ํ์ฌ Head๊ฐ ๊ฐ๋ฆฌํค๋ ๋ธ๋์น์ branch_name์์ ํ๋ ์์ ์ ํฉ์น๋ผ๋ ์๋ฏธ
$ git merge {branch_name}
Conflict ํด๊ฒฐํ๊ธฐ
develop ๋ธ๋์น์์ feature-attack, feature-defend ๋ธ๋์น๋ก ๊ฐ๋ผ์ง๊ธฐ ์ ์ ์ํฉ
์ด ์ํ์์ BasicCar ํด๋์ค์ ๋ ๋ถ๋ถ์ ์๋ก ๋ค๋ฅธ method๋ฅผ ์ถ๊ฐํจ.
์ฆ, ๊ฐ์ ๋ผ์ธ์ธ๋ฐ ์๋ก ๋ค๋ฅธ ์ฝ๋๋ฅผ ์ด ๊ฒ์.
develop์์ feature-attack ๋ธ๋์น์ ์ฒซ๋ฒ์งธ merge๋ฅผ ํ ๋ค์ ์ํ
์ฌ๊ธฐ์์ ๋ ๋ค์ feature-defend๊ฐ ๊ฐ๋ฆฌํค๋ ๋ด์ฉ์ mergeํ๋ ค๊ณ ํจ.
์ด๋ Git์์ ์ถฉ๋(conflict) ๋ฐ์
-> ํ์ฌ ์ํ์์ feature-defend์ merge๋ฅผ ํด์ผ ํ๋๋ฐ ๊ฐ์ ๋ผ์ธ์ ๋ค๋ฅธ ์ฝ๋๊ฐ ์ ํ์์ผ๋,
attack ๋ฉ์๋๋ฅผ ์ ํํด์ผ ํ๋์ง, defend ๋ฉ์๋๋ฅผ ์ ํํด์ผ ํ๋์ง๋ฅผ ๋ชจ๋ฆ
์์ ์ถฉ๋์ ํด๊ฒฐํ๊ธฐ ์ํด์๋?
1. BasicCar.js ํ์ผ์์ ์ถฉ๋์ ๋ํ๋ด๋ ํ์๋ค์ ๋ชจ๋ ์ง์ฐ๊ณ , ์ฐ๋ฆฌ๊ฐ ์ํ๋ ์ฝ๋์ ๋ชจ์ต์ผ๋ก ๊ณ ์ณ์ค
2. ์๋ ๋ช ๋ น์ด ์ ๋ ฅ
$ git add .
$ git commit -m "{commit_message}"
Merge ํ ๋ ๋ํ๋๋ ๋ ๊ฐ์ง ๊ฒฝ์ฐ
Fast-Forward Merge : ๊ธฐ์กด ๋ธ๋์น๊ฐ merge ๋นํ๋ ๋ธ๋์น๊น์ง ์ญ ๋น๊ฒจ์ ธ ์ค๋ ๊ฒฝ์ฐ
์ง์ ๋ชจ์์ ์ปค๋ฐ ๋ก๊ทธ์์ ์๋ค๋ก ์๋ ๋ธ๋์น์ธ ๊ฒฝ์ฐ์๋
์ด์ ์ปค๋ฐ์ ๊ฐ๋ฆฌํค๊ณ ์๋ ๊ธฐ์ค ๋ธ๋์น์์ merge๋ฅผ ์๋ํ๋ฉด
๋ณด๋ค ์ต์ ์ปค๋ฐ์ ๊ฐ๋ฆฌํค๋ ํ๊ฒ ๋ธ๋์น๋ก์ ์์น๋ก
๊ธฐ์กด ๋ธ๋์น๊ฐ ์ด๋๋ง ํ๋ Fast-Forward Merge๊ฐ ๋ฐ์ํจ.
์์ ์๋ก์ด commit์ด ๋ง๋ค์ด์ง๋ ๊ฒฝ์ฐ
ํ๋ฆ์ด ์ค๊ฐ์ ๊ฐ๋ผ์ง ๊ฒฝ์ฐ(๋ณ๋ ฌ),
๊ฐ ํ๋ฆ์ ์ปค๋ฐ์ ๊ฐ๋ฆฌํค๋ ๋ธ๋์น๋ค์ mergeํ๋ฉด
์ conflict ํด๊ฒฐ์ ๊ฒฐ๊ณผ์ฒ๋ผ ์๋ก์ด merge commit์ด ๋ฐ์ํจ.
๋ด ์ปดํจํฐ์ ํ๋ก์ ํธ๋ฅผ ๊นํ๋ธ/๊น๋ฉ์ ์ฒ์ ์ฌ๋ฆด ๋ ์ฌ์ฉํ๋ ๋ช ๋ น์ด์ ์๋ฏธ
git push origin master๋ master ๋ธ๋์น๋ฅผ origin์ด ์๋ฏธํ๋ ๊น๋ฉ ์๋ฒ์ ํ๋ก์ ๋ก ์ฌ๋ ค๋ฌ๋ผ๋ ๋ช ๋ น
-u : --set-upstream์ ์ค์๋ง๋ก, ํ์ฌ ๋ด ์ปดํจํฐ์ ๋ง์คํฐ ๋ธ๋์น๊ฐ
ํญ์ ๊น๋ฉ ์๋ฒ์ ์ฌ๋ฆฐ ๋ง์คํฐ ๋ธ๋์น๋ฅผ ๋ฐ๋ผ๋ณด๋๋ก ํ๋ผ๋ ๋ช ๋ น
-u ์ต์ ์ ์ฃผ๊ณ ๋งจ ์ฒ์์ push๋ฅผ ํ๊ฒ ๋๋ฉด, ๋ค์๋ถํฐ๋ git push/pull๋ง ํ๋๋ผ๋
git์ด ์์์ ๋ด ์ปดํจํฐ์ ๋ง์คํฐ ๋ธ๋์น๋ฅผ ๊น๋ฉ ์๋ฒ์ ์๋ ๋ง์คํฐ ๋ธ๋์น๋ฅผ ๋์์ผ๋ก ์์ ์ ์ํํ๊ฒ ๋จ.
$ git push -u origin master
์๋ ๋ช ๋ น์ด๋ฅผ ์คํํ๋ฉด ์์ ๋ง๋ค์๋ develop ๋ธ๋์น๋ฅผ ์ธ๋ถ ์ ์ฅ์์ ์ ๋ก๋ ํ ์ ์์.
(ํ์ฌ develop ๋ธ๋์น๊ฐ ๊ฐ๋ฆฌํค๊ณ ์๋ ์ต์ ์ปค๋ฐ๊ณผ ๊ทธ ์ด์ ์ ์ ๊ท ์ปค๋ฐ๋ค์ด ๋ชจ๋ ๊น๋ฉ ์๋ฒ์ ์ ๋ก๋ ๋จ)
$ git push -u origin develop