1. branch : ํ๋ก์ ํธ ๋ณต์ฌ๋ณธ
์ฝ๋์ง๋ค๋ณด๋ฉด ๊ฐ์๊ธฐ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ฑฐ๋ ๊ทธ๋์ผํ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ๊ทธ๋ด ๋๋ ์๋ณธํ์ผ์ ์ฝ๋๋ฅผ ์ถ๊ฐํ๊ณ ์ปค๋ฐํด๋ ๋๊ฒ ์ง๋ง, ํน์๋ ์๋ชปํด์ ์ง๊ธ๊น์ง ์งฐ๋ ํ๋ก๊ทธ๋จ์ด ๋ง๊ฐ์ง๊ฑฐ๋ ๊ทธ๋ฌ๋ฉด ์ด๋ป๊ฒํ์ฃ ?
์์ ํ๊ฒ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ณ ์ถ์ผ๋ฉด ํ๋ก์ ํธ์ ๋ณต์ฌ๋ณธ์ ๋ง๋ค์ด์ ๊ฑฐ๊ธฐ์ ๋จผ์ ๊ฐ๋ฐํฉ๋๋ค. git ์์์ branch ๊ธฐ๋ฅ์ ์ด์ฉํด์ ๋ณต์ฌ๋ณธ์ ์ฝ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.
branch = ํ๋ก์ ํธ ๋ณต์ฌ๋ณธ
1.1 ํ๋ก์ ํธ์ ์ ๊ธฐ๋ฅ ํ์
ํ๋ก์ ํธ ์ ์ฝ๋๋ฅผ ์ถ๊ฐํ๊ณ ์ถ์ผ๋ฉด, ์ฝ๋๋ฅผ ์ง์ ์์ ํ๋ ๊ฒ์ด ์๋๋ผ, ํ๋ก์ ํธ ์ฌ๋ณธ์ ๋ง๋ค์ด์ ๊ฑฐ๊ธฐ์ ๊ฐ๋ฐํฉ๋๋ค. e.g. ์ผํ๋ชฐ์ ์ฟ ํฐ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ณ ์ถ์
1.2 branch ์์ฑ ๋ฐ ์ด๋
1# ํ๋ก์ ํธ ์ฌ๋ณธ 1๊ฐ ์์ฑ2# ๐ git branch ๋ธ๋์น์ด๋ฆ3$ git branch coupon45# ๋ธ๋์น ์ด๋6# ๐ git switch ๋ธ๋์น์ด๋ฆ7$ git switch coupon89# ํ์ฌ ๋ธ๋์น ์์น10$ git status11On branch coupon
๋ค์ ๋ฉ์ธ ๋ธ๋์น๋ก ๋๋์๊ฐ๊ณ ์ถ์ผ๋ฉด, git switch main ํ๋ฉด ๋ฉ๋๋ค.
- ์ฌ์ฉ์ ์ปดํจํฐ์ ์ค์ ์ ๋ฐ๋ผ main ๋ง๊ณ master ์ผ ์๋ ์์
coupon ๋ธ๋์น๋ก ์ด๋ํ์ผ๋ฉด ๊ฑฐ๊ธฐ์ ๊ฐ๋ฐํ๊ณ commit ๋ง๋๋ก ํ ์ ์์ต๋๋ค.
1aaaaaaaaaaa // coupon ๋ธ๋์น์์ ์์ ์ค์
1git add .2git commit -m 'ํ์ผ๋ง๋ค์์'
์ ๋ฒ ์ฅ๋ถํฐ commit ํ๋ ๊ณณ์ main branch ๋๋ master branch๋ผ๊ณ ๋ถ๋ฅด๊ณ , coupon branch์์ ์์ ํ ๋ด์ฉ์ ์๋ ๋ธ๋์น์ธ main branch์ ์๋ฌด๋ฐ ์ํฅ์ด ์์ต๋๋ค.
1git switch main # main ๋ธ๋์น๋ก ์ด๋2# coupon ๋ธ๋์น์์ ๋ง๋ coupon.txt๋ ์ฌ๋ผ์ง3# ์๋ํ๋ฉด coupon ๋ธ๋์น์์ ์์ ํ์ผ๋๊น45# ---------------------------------------------------------------------------6# ๐ coupon ๋ธ๋์น์์ ์๋ก์ด ํ์ผ ๋ง๋ค์ด์ ์ฝ๋์ง๊ณ commit ๋ช๋ฒ ํด๋ณด์ญ์์ค.7# master/main ๋ธ๋์น์์๋ ๊ธฐ์กด ํ์ผ๋ค์ commit ๋ช๋ฒ ํด๋ด ์๋ค.8git switch coupon9# coupon.txt ์๋ฌด๋ ๊ฒ๋ ์์ ํ10git add .11git commit -m 'ํ์ผ๋ง๋ค์์2'1213git switch main14# app.txt ์๋ฌด๋ ๊ฒ๋ ์์ ํ15git add .16git commit -m 'main๋ธ๋์น ์์ '1718# branch ์ commit ๋ด์ญ์ ํ ๋์ ๊ทธ๋ํ๋ก ๋ณด๊ณ ์ถ์ผ๋ฉด19git log --graph --oneline --all
git log ํ๋ฉด ๋์ค๋ HEAD๋ ํ์ฌ ์์น๋ฅผ ์๋ฏธ
2. merge : branch ํฉ์น๊ธฐ
branch์์ ์ฝ๋๋ฅผ ๋ค ์์ฑํ์ผ๋ฉด, ์๋ณธ์ฝ๋๊ฐ ์๋ master ๋๋ main ๋ธ๋์น์ ํฉ์น๋ฉด ๋ฉ๋๋ค. ๋ธ๋์น๋ฅผ ํฉ์น๋๊ฑธ ์ ๋ฌธ์ฉ์ด๋ก merge๋ผ๊ณ ํฉ๋๋ค.
1git switch main2git merge ๋ธ๋์น๋ช
merge ํ๊ณ ์ถ์ผ๋ฉด
main/master๋ธ๋์น๋ก ๋ค์ ์ด๋ํ๊ณgit merge ๋ธ๋์น๋ช์ ๋ ฅํ๋ฉด ํฉ์ณ์ง๋๋ค.
์๋ฅผ ๋ค์ด, git merge coupon์ด๋ฌ๋ฉด coupon ๋ธ๋์น์ ์ฝ๋๋ค์ด main/master ๋ธ๋์น์ ํฉ์ณ์ง๋๋ค.
merge ํ๊ณ ๋์ git log ์ด๋ฐ๊ฑฐ ํด๋ณด๋ฉด ์ด์๊ฒ ํฉ์ณ์คฌ๋ค๊ณ ์๋ ค์ค๋๋ค.
2.1 merge conflict(์ถฉ๋)
๊ทผ๋ฐ ํฉ์น (merge) ๋ ์ฃผ์์ฌํญ์ด ์๋๋ฐ, master ๋ธ๋์น์ coupon ๋ธ๋์น์์ ๊ฐ์ ํ์ผ, ๊ฐ์ ์ค์ ์์ ํ์ ๊ฒฝ์ฐ merge conflict๊ฐ ๋ฐ์ํฉ๋๋ค.
์ด ๊ฒฝ์ฐ ์๋ํฐ๋ก ํด๋น ํ์ผ์ ์ด์ด๋ณด๋ฉด ์ถฉ๋์ฌํญ์ด ์ ํ์์ต๋๋ค. ๋ ์ค ์ด๋ค ์ฝ๋๋ฅผ ์ ์ฉํ ์ง ๊ณ ๋ฅด๋ฉด ๋๋๋ฐ,
<<<< / >>>> / ==== ์ด๋ฐ ์ธ๋ฐ์๋ ๊ฒ๋ค์ ๋ค ์ง์ฐ๊ณ ์ํ๋ ์ฝ๋๋ง ๋จ๊ธฐ๋ฉด ๋ฉ๋๋ค.
(VSCode ์๋ํฐ์ ๊ฒฝ์ฐ Accept Incoming Change ์ด์ฉ๊ตฌ ๋ฒํผ๋ค์ ์ ๊ณตํด์ฃผ๋๋ฐ ๊ทธ๊ฑฐ ๋๋ฅด๋ฉด ํธ๋ฆฌํฉ๋๋ค)
์ด๋ค ์ฝ๋๋ฅผ ๋จ๊ธธ์ง ๊ฒฐ์ ํ์ผ๋ฉด
1# git add ํ์ผ๋ช2# git commit -m '๋ฉ์ธ์ง'34git add .5git commit -m '์ถฉ๋ ํด๊ฒฐ'
์ ๋ ฅํ๋ฉด ์๋ก์ด commit ์ ์์ฑํด์ฃผ๋ฉฐ merge conflict ํด๊ฒฐ + ๋ธ๋์น ํฉ์น๊ธฐ ์๋ฃ์ ๋๋ค.
3. ์ ๋ฆฌโญ
1git branch ๋ธ๋์น๋ช # ๋ธ๋์น ์์ฑ2git switch ๋ธ๋์น๋ช # ๋ธ๋์น ์ด๋34# ๋ธ๋์น ํฉ์น๊ธฐ๋ main/master ๋ธ๋์น๋ก ์ด๋ ํ5git merge ๋ธ๋์น๋ช # ๋ธ๋์น ํฉ์น๊ธฐ67# ๋ธ๋์น๋ง๋ค commit ๋ด์ญ์ ๊ทธ๋ํ๋ก ๋ณด๊ณ ์ถ์ผ๋ฉด8git log --graph --oneline --all910# ๋ธ๋์น ํฉ์น ๋ conflict๊ฐ ๋ฐ์ํ๋ฉด11# ํ์ผ์ด์ด์ ์์ ํ git add, git commit12git add ํ์ผ๋ช13git commit -m '๋ฉ์ธ์ง'