Git ๋ธ๋์น๋ ์ '๊ฐ๋ฒผ์ด'๊ฐ?
ํ์ ์ํํธ์จ์ด ๊ฐ๋ฐ ํ๊ฒฝ์์ '๋ธ๋์น(Branch)'๋ ๋นผ๋์ ์ ์๋ ํต์ฌ ๊ธฐ๋ฅ์ ๋๋ค. SVN๊ณผ ๊ฐ์ ๊ณผ๊ฑฐ์ ๋ฒ์ ๊ด๋ฆฌ ์์คํ ๊ณผ ๋ฌ๋ฆฌ, Git์ ๋ธ๋์น๋ ์์ฑ๊ณผ ์ ํ์ด ๋งค์ฐ ๋น ๋ฅด๊ณ ๊ฐ๋ณ์ต๋๋ค. ๊ทธ ์ด์ ๋ Git์ด ๋ธ๋์น๋ฅผ 'ํ์ผ์ ๋ณต์ฌ๋ณธ'์ด ์๋, ํน์ ์ปค๋ฐ์ ๊ฐ๋ฆฌํค๋ '40๋ฐ์ดํธ์ง๋ฆฌ ํฌ์ธํฐ'๋ก ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ณธ ํฌ์คํ ์์๋ Git ๋ธ๋์น์ ๋ด๋ถ ๋์ ์๋ฆฌ๋ถํฐ, ์ค๋ฌด์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ๋ธ๋์นญ ์ ๋ต์ธ Git-flow๊น์ง ์์ธํ ๋ถ์ํ์ฌ ํจ์จ์ ์ธ ๋ฒ์ ๊ด๋ฆฌ ๋ฐฉ๋ฒ์ ์์๋ณด๊ฒ ์ต๋๋ค.
1. Git ๋ธ๋์น์ ๋ด๋ถ ๋์ ์๋ฆฌ: ํฌ์ธํฐ์ ์ดํด
๋ง์ ์ด๋ณด์๊ฐ ๋ธ๋์น๋ฅผ ๋ง๋ค๋ฉด ํ๋ก์ ํธ ํด๋๊ฐ ํต์งธ๋ก ๋ณต์ฌ๋๋ค๊ณ ์คํดํ๊ณค ํฉ๋๋ค. ํ์ง๋ง Git ๋ด๋ถ๋ฅผ ๋ค์ฌ๋ค๋ณด๋ฉด ์๋ฆฌ๋ ํจ์ฌ ๋จ์ํฉ๋๋ค.
1.1. ์ปค๋ฐ(Commit)๊ณผ ์ค๋ ์ท
Git์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋, Git์ ์์ ๋ ํ์ผ์ ์ค๋ ์ท์ ์ฐ๊ณ ํด๋น ์ค๋ ์ท์ ๊ฐ๋ฆฌํค๋ ์ปค๋ฐ ๊ฐ์ฒด(Commit Object)๋ฅผ ์์ฑํฉ๋๋ค. ์ด ์ปค๋ฐ ๊ฐ์ฒด์๋ ์ด์ ์ปค๋ฐ(Parent)์ ๋ํ ํฌ์ธํฐ๊ฐ ํฌํจ๋์ด ์์ด, ์ ์ฒด์ ์ธ ํ์คํ ๋ฆฌ๋ฅผ ์ถ์ ํ ์ ์๊ฒ ํฉ๋๋ค.
1.2. ๋ธ๋์น๋ ๋จ์ํ ํฌ์ธํฐ๋ค
Git์์ ๋ธ๋์น๋ ํน์ ์ปค๋ฐ์ ๊ฐ๋ฆฌํค๋ ๊ฐ๋ณ ํฌ์ธํฐ์ ๋๋ค. ๊ธฐ๋ณธ ๋ธ๋์น์ธ main(๋๋ master) ์ญ์ ํน๋ณํ ๋ธ๋์น๊ฐ ์๋๋ผ, ๋ง์ง๋ง ์ปค๋ฐ์ ๊ฐ๋ฆฌํค๊ณ ์๋ ํฌ์ธํฐ์ผ ๋ฟ์ ๋๋ค. ์๋ก์ด ๋ธ๋์น๋ฅผ ์์ฑํ๋ค๋ ๊ฒ์ ๋จ์ํ ์๋ก์ด ํฌ์ธํฐ๋ฅผ ํ๋ ๋ ๋ง๋๋ ์์ ์ ๋ถ๊ณผํ๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ๋ ๋์คํฌ ๊ณต๊ฐ์ ๊ฑฐ์ ์ฐจ์งํ์ง ์์ต๋๋ค.
1.3. HEAD์ ์ญํ
์ง๊ธ ๋ด๊ฐ ์ด๋ค ๋ธ๋์น์์ ์์ ํ๊ณ ์๋์ง Git์ ์ด๋ป๊ฒ ์๊น์? ๋ฐ๋ก 'HEAD'๋ผ๋ ํน๋ณํ ํฌ์ธํฐ ๋๋ถ์ ๋๋ค. HEAD๋ ํ์ฌ ์ฒดํฌ์์๋ ๋ธ๋์น, ์ฆ '์ง๊ธ ์์ ์ค์ธ ๋ธ๋์น'๋ฅผ ๊ฐ๋ฆฌํต๋๋ค.
2. ๋ธ๋์น ๋ณํฉ(Merge)์ ๋ ๊ฐ์ง ๋ฐฉ์
๋ธ๋์น์์ ์์ ์ด ์๋ฃ๋๋ฉด ๋ค์ ๋ฉ์ธ ์ค๊ธฐ๋ก ํฉ์น๋ ๊ณผ์ ์ด ํ์ํฉ๋๋ค. ์ด๋ Git์ ์ํฉ์ ๋ฐ๋ผ ๋ ๊ฐ์ง ๋ฐฉ์์ ์ ํํฉ๋๋ค.
2.1. Fast-forward ๋ณํฉ
๋ณํฉํ๋ ค๋ ๋ธ๋์น๊ฐ ํ์ฌ ๋ธ๋์น์ ์ง์ ์ ์ธ ์ดํ ์ปค๋ฐ์ผ ๋ ๋ฐ์ํฉ๋๋ค. ๋ณ๋์ ํฉ์น๊ธฐ ์์ ์์ด, ๋ธ๋์น ํฌ์ธํฐ๋ฅผ ์ต์ ์ปค๋ฐ์ผ๋ก ๋จ์ํ '์์ผ๋ก ์ด๋'์ํค๋ ๋ฐฉ์์ ๋๋ค. ํ์คํ ๋ฆฌ๊ฐ ์ผ์ง์ ์ผ๋ก ๋จ๋๋ค๋ ํน์ง์ด ์์ต๋๋ค.
2.2. 3-way Merge (Recursive)
๋ธ๋์น๊ฐ ๊ฐ๋ผ์ง ์ดํ, ๋ ๋ธ๋์น ๋ชจ๋์ ์๋ก์ด ์ปค๋ฐ์ด ๋ฐ์ํ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋ฉ๋๋ค. Git์ ๋ ๋ธ๋์น์ ๊ณตํต ์กฐ์(Common Ancestor)์ ์ฐพ์ ์ด 3๊ฐ์ ํฌ์ธํธ(๊ณตํต ์กฐ์, ๋ธ๋์น A ๋, ๋ธ๋์น B ๋)๋ฅผ ๋น๊ตํ์ฌ ๋ณํฉํฉ๋๋ค. ์ด๋ ์๋ก์ด '๋ณํฉ ์ปค๋ฐ(Merge Commit)'์ด ์์ฑ๋ฉ๋๋ค.
3. ์ค๋ฌดํ ๋ธ๋์น ์ ๋ต: Git-flow ๋ชจ๋ธ
ํผ์ ๊ฐ๋ฐํ ๋๋ ๋ธ๋์น ๊ด๋ฆฌ๊ฐ ์ด๋ ต์ง ์์ง๋ง, ์ฌ๋ฌ ๋ช ์ ๊ฐ๋ฐ์๊ฐ ๋์์ ์๋ง์ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ ๋๋ ์ฒด๊ณ์ ์ธ ๊ท์น์ด ํ์ํฉ๋๋ค. ์ด๋ฅผ '๋ธ๋์นญ ์ ๋ต'์ด๋ผ๊ณ ํ๋ฉฐ, ๊ฐ์ฅ ๋ํ์ ์ธ ๊ฒ์ด Git-flow์ ๋๋ค.
Git-flow๋ ํฌ๊ฒ 5๊ฐ์ง ์ข ๋ฅ์ ๋ธ๋์น๋ฅผ ์ด์ํฉ๋๋ค.
- Main (Master): ์ ํ์ผ๋ก ์ถ์๋ ์ ์๋ ์ํ์ ์ฝ๋๋ง์ ๊ด๋ฆฌํ๋ ๋ธ๋์น์ ๋๋ค.
- Develop: ๋ค์ ์ถ์ ๋ฒ์ ์ ์ํด ๊ฐ๋ฐ ์ค์ธ ์ฝ๋๊ฐ ๋ชจ์ด๋ ํตํฉ ๋ธ๋์น์ ๋๋ค.
- Feature: ๋จ์ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ๋ ๋ธ๋์น์ ๋๋ค. develop์์ ๊ฐ๋ผ์ ธ ๋์ ๊ธฐ๋ฅ ๊ตฌํ ํ ๋ค์ develop์ผ๋ก ํฉ์ณ์ง๋๋ค.
- Release: ๋ฐฐํฌ ์ ๋ง์ง๋ง์ผ๋ก ๋ฒ๊ทธ ์์ ๋ฐ QA๋ฅผ ์งํํ๋ ๋จ๊ณ์ ๋๋ค.
- Hotfix: ์ถ์๋ ๋ฒ์ (Main)์์ ๊ธด๊ธํ๊ฒ ์์ ํด์ผ ํ ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ์ ๋ ์ฌ์ฉํ๋ ๋ธ๋์น์ ๋๋ค.
์ด๋ฌํ ์ ๋ต์ ์ฌ์ฉํ๋ฉด ๋๊ท๋ชจ ํ๋ก์ ํธ์์๋ ์ฝ๋ ์ถฉ๋์ ์ต์ํํ๊ณ ๋ฐฐํฌ ์ฃผ๊ธฐ๋ฅผ ์์ ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
4. ์ถฉ๋(Conflict) ํด๊ฒฐ๊ณผ ๊ด๋ฆฌ ๊ธฐ๋ฒ
๋ณํฉ ๊ณผ์ ์์ ๊ฐ์ ํ์ผ์ ๊ฐ์ ๋ผ์ธ์ ์๋ก ๋ค๋ฅด๊ฒ ์์ ํ์ ๋ '์ถฉ๋'์ด ๋ฐ์ํฉ๋๋ค.
- ์ถฉ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ: Git์ ์ถฉ๋์ด ๋ฐ์ํ ๋ถ๋ถ์ ํน์ ๊ธฐํธ(<<<<, ====, >>>>)๋ก ํ์ํด ์ค๋๋ค. ๊ฐ๋ฐ์๋ ์ด ๋ถ๋ถ์ ์ง์ ํ์ธํ์ฌ ์ต์ข ์ฝ๋๋ฅผ ๊ฒฐ์ ํ ๋ค git add์ git commit์ ํตํด ๋ณํฉ์ ์๋ฃํด์ผ ํฉ๋๋ค.
- Rebase vs Merge: ํ์คํ ๋ฆฌ๋ฅผ ๊น๋ํ๊ฒ ์ ์งํ๊ณ ์ถ๋ค๋ฉด Merge ๋์ Rebase๋ฅผ ๊ณ ๋ คํ ์ ์์ต๋๋ค. Rebase๋ ๋ธ๋์น์ ๋ฒ ์ด์ค ์ฃผ์๋ฅผ ๋ณ๊ฒฝํ์ฌ ๋ง์น ์ฒ์๋ถํฐ ํ ์ค๊ธฐ์์ ๊ฐ๋ฐ๋ ๊ฒ์ฒ๋ผ ํ์คํ ๋ฆฌ๋ฅผ ์ฌ์ ๋ ฌํด ์ค๋๋ค. ๋ค๋ง, ์ด๋ฏธ ์๊ฒฉ ์ ์ฅ์์ Push๋ ์ปค๋ฐ์ ๋ํด์๋ Rebase ์ฌ์ฉ์ ์ง์ํด์ผ ํฉ๋๋ค.
ํจ์จ์ ์ธ ๊ฐ๋ฐ์ ์์์ ๋ธ๋์น ๊ด๋ฆฌ๋ก๋ถํฐ
Git ๋ธ๋์น๋ ๋จ์ํ ์ฝ๋๋ฅผ ๋๋๋ ๋๊ตฌ๊ฐ ์๋๋ผ, ๊ฐ๋ฐ ํ๋ก์ธ์ค์ ํ๋ฆ์ ์ ์ดํ๋ ๊ฐ๋ ฅํ ๋ฉ์ปค๋์ฆ์ ๋๋ค. ๋ธ๋์น์ ํฌ์ธํฐ ๊ฐ๋ ์ ์ดํดํ๊ณ ํ์ ๊ท๋ชจ์ ํ๋ก์ ํธ ์ฑ๊ฒฉ์ ๋ง๋ ๋ธ๋์นญ ์ ๋ต์ ๋์ ํ๋ค๋ฉด, ๋ ์์ ์ ์ด๊ณ ์ ๋ฌธ์ ์ธ ์ํํธ์จ์ด ๊ฐ๋ฐ์ด ๊ฐ๋ฅํด์ง ๊ฒ์ ๋๋ค.
'๊ณต๋ถ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| Embedded ํ์จ์ด ๊ฐ๋ฐ์ ํต์ฌ, ์ธํฐ๋ฝํธ(Interrupt) ๋์ ์๋ฆฌ (0) | 2026.05.15 |
|---|---|
| GPU์ ๋์ ์๋ฆฌ (0) | 2026.05.07 |
| CPU์ ๋์ ์๋ฆฌ (0) | 2026.05.06 |
| ๋ฐ๋์ฒด ์๋ฆฌ์ 8๋ ๊ณต์ (0) | 2026.05.02 |