๐๐ปโ๏ธ Git์์ branch marge ๋ฐฉ๋ฒ๋ค๊ณผ ๊ฐ ๋ฐฉ๋ฒ๋ค์ ํน์ง์ ์ค๋ช ํด ์ฃผ์ธ์.
๐๐ปโ๏ธ Git Flow ๋ธ๋์น ์ ๋ต์ ๋ํด ์ค๋ช ํด ์ฃผ์ธ์.
Git Branch Merge ๋ฐฉ๋ฒ๋ค
1. Fast-Forward Merge
ํน์ง
- Fast-Forward Merge๋ ๋ธ๋์น๊ฐ ๋ณํฉ๋ ๋ ์๋ก์ด ์ปค๋ฐ์ ๋ง๋ค์ง ์๊ณ , ๋จ์ํ ๋ธ๋์น๋ฅผ ์์ผ๋ก ์ด๋์ํต๋๋ค.
- ๋ ๋ธ๋์น ์ฌ์ด์ ๋ค๋ฅธ ์ปค๋ฐ์ด ์์ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
- ์ฅ์ : ํ์คํ ๋ฆฌ๊ฐ ๊น๋ํ๊ฒ ์ ์ง๋ฉ๋๋ค.
- ๋จ์ : ์ด๋ค ๋ธ๋์น๊ฐ ์ด๋ค ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋์ง ๋ช ํํ์ง ์์ ์ ์์ต๋๋ค.
์ฌ์ฉ ๋ฐฉ๋ฒ
# ๋ณํฉํ ๋ธ๋์น๋ก ์ฒดํฌ์์
git checkout main
# ๋ณํฉ
git merge feature-branch
2. Recursive Merge (3-way Merge)
ํน์ง
- Recursive Merge๋ ๋ ๋ธ๋์น๊ฐ ๊ฐ๊ฐ ๋ค๋ฅธ ์ปค๋ฐ์ ๊ฐ์ง ๋ ์ฌ์ฉ๋ฉ๋๋ค.
- ๊ณตํต ์กฐ์์ ์ฐพ์ ์์ชฝ์ ๋ณ๊ฒฝ์ฌํญ์ ํ๋๋ก ํฉ์นฉ๋๋ค.
- ์ฅ์ : ์ถฉ๋์ด ๋ฐ์ํ ๊ฒฝ์ฐ ์ถฉ๋์ ํด๊ฒฐํ๋ฉด์ ๋ณํฉํ ์ ์์ต๋๋ค.
- ๋จ์ : ์ปค๋ฐ ํ์คํ ๋ฆฌ๊ฐ ๋ณต์กํด์ง ์ ์์ต๋๋ค.
์ฌ์ฉ ๋ฐฉ๋ฒ
# ๋ณํฉํ ๋ธ๋์น๋ก ์ฒดํฌ์์
git checkout main
# ๋ณํฉ
git merge feature-branch
3. Squash Merge
ํน์ง
- Squash Merge๋ ์ฌ๋ฌ ์ปค๋ฐ์ ํ๋์ ์ปค๋ฐ์ผ๋ก ์์ถํ์ฌ ๋ณํฉํฉ๋๋ค.
- ์ฅ์ : ์ปค๋ฐ ํ์คํ ๋ฆฌ๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ์ ์งํ ์ ์์ต๋๋ค.
- ๋จ์ : ๊ฐ๋ณ ์ปค๋ฐ ํ์คํ ๋ฆฌ๊ฐ ์ฌ๋ผ์ง๋ฏ๋ก, ๋๋ฒ๊น ์ด ์ด๋ ค์ธ ์ ์์ต๋๋ค.
์ฌ์ฉ ๋ฐฉ๋ฒ
# ๋ณํฉํ ๋ธ๋์น๋ก ์ฒดํฌ์์
git checkout main
# ๋ณํฉ
git merge --squash feature-branch
# ์ค์ฟผ์๋ ์ปค๋ฐ ๋ฉ์์ง ์์ฑ
git commit
4. Rebase and Merge
ํน์ง
- Rebase๋ ์ปค๋ฐ์ ๋ค์ ์์ฑํ์ฌ ํ๋์ ์ง์ ํ์คํ ๋ฆฌ๋ก ๋ง๋ญ๋๋ค.
- ์ฅ์ : ํ์คํ ๋ฆฌ๊ฐ ๊น๋ํด์ง๋๋ค.
- ๋จ์ : ํ์ ์ ์ฃผ์๊ฐ ํ์ํฉ๋๋ค. ๋ค๋ฅธ ์ฌ๋๋ค์ด ๊ฐ์ ๋ธ๋์น๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค๋ฉด ์ถฉ๋์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
์ฌ์ฉ ๋ฐฉ๋ฒ
# feature ๋ธ๋์น์์ main ๋ธ๋์น์ ์ต์ ์ปค๋ฐ์ ๊ธฐ์ค์ผ๋ก ์ฌ๋ฐฐ์น
git checkout feature-branch
git rebase main
# ๋ณํฉํ ๋ธ๋์น๋ก ์ฒดํฌ์์
git checkout main
# ๋ณํฉ
git merge feature-branch
Git Flow
Git-flow์๋ 5๊ฐ์ง ์ข ๋ฅ์ ๋ธ๋์น๊ฐ ์กด์ฌํฉ๋๋ค. ํญ์ ์ ์ง๋๋ ๋ฉ์ธ ๋ธ๋์น๋ค(master, develop)๊ณผ ์ผ์ ๊ธฐ๊ฐ ๋์๋ง ์ ์ง๋๋ ๋ณด์กฐ ๋ธ๋์น๋ค(feature, release, hotfix)์ด ์์ต๋๋ค.
- master : ์ ํ์ผ๋ก ์ถ์๋ ์ ์๋ ๋ธ๋์น
- develop : ๋ค์ ์ถ์ ๋ฒ์ ์ ๊ฐ๋ฐํ๋ ๋ธ๋์น
- feature : ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ๋ ๋ธ๋์น
- release : ์ด๋ฒ ์ถ์ ๋ฒ์ ์ ์ค๋นํ๋ ๋ธ๋์น
- hotfix : ์ถ์ ๋ฒ์ ์์ ๋ฐ์ํ ๋ฒ๊ทธ๋ฅผ ์์ ํ๋ ๋ธ๋์น
Git Flow ๋ธ๋์น ์ ๋ต
Git Flow๋ Vincent Driessen์ด ์ ์ํ ๋ธ๋์น ์ ๋ต์ผ๋ก, ํ์ ์ ์ํํ๊ฒ ํ๊ณ ๋ฆด๋ฆฌ์ฆ๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋๋ก ๋์์ค๋๋ค. ์ฃผ์ ๋ธ๋์น์ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ฃผ์ ๋ธ๋์น
1. Main ๋ธ๋์น
- ์ ํ์ด ์ค์ ๋ก ๋ฐฐํฌ๋๋ ๋ธ๋์น์ ๋๋ค.
- ํญ์ ์์ ์ ์ธ ์ํ๋ฅผ ์ ์งํด์ผ ํฉ๋๋ค.
2. Develop ๋ธ๋์น
- ๋ค์ ๋ฆด๋ฆฌ์ฆ๋ฅผ ๊ฐ๋ฐํ๋ ๋ธ๋์น์ ๋๋ค.
- ๋ชจ๋ ๊ธฐ๋ฅ ๋ธ๋์น๊ฐ ์ฌ๊ธฐ๋ก ๋ณํฉ๋ฉ๋๋ค.
3. Feature ๋ธ๋์น
- ์๋ก์ด ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ๋ ๋ธ๋์น์ ๋๋ค.
- develop ๋ธ๋์น์์ ๋ถ๊ธฐํ์ฌ develop ๋ธ๋์น๋ก ๋ณํฉ๋ฉ๋๋ค.
4. Release ๋ธ๋์น
- ๋ฆด๋ฆฌ์ฆ ์ค๋น๋ฅผ ์ํ ๋ธ๋์น์ ๋๋ค.
- develop ๋ธ๋์น์์ ๋ถ๊ธฐํ์ฌ main ๋ธ๋์น๋ก ๋ณํฉ๋ฉ๋๋ค.
- ๋ฒ๊ทธ ์์ ๊ณผ ๊ฐ์ ์ต์ข ์์ ์ด ์ด๋ค์ง๋๋ค.
5. Hotfix ๋ธ๋์น
- ๋ฐฐํฌ๋ ์ ํ์ ๊ธด๊ธํ ๋ฒ๊ทธ ์์ ์ ์ํ ๋ธ๋์น์ ๋๋ค.
- main ๋ธ๋์น์์ ๋ถ๊ธฐํ์ฌ main ๋ธ๋์น์ develop ๋ธ๋์น๋ก ๋ณํฉ๋ฉ๋๋ค.
Git Flow ์ ๋ต์ ์ฅ์
Git Flow๋ฅผ ์ฌ์ฉํ๋ฉด ๋ธ๋์น๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์์ผ๋ฉฐ, ์ฌ๋ฌ ๊ฐ๋ฐ์๋ค์ด ํ์ ํ ๋ ํผ๋์ ์ค์ด๊ณ ํจ์จ์ ์ผ๋ก ์์ ์ ์งํํ ์ ์์ต๋๋ค.