dev
์feature
๋ธ๋์น๋ก ์ฌ๋ฌ ๊ฐ๋ ์ ์ดํดํด๋ณด์! (merge์ ๊ธฐ๋ณธ ๋จ์๋ branch)
dev
: base branchfeature
: dev ๋ธ๋์น์์ ๋๋ ์ง ํ์ ๋ธ๋์น
feature๋ธ๋์น๋ฅผ dev๋ธ๋์น๋ก ๋ณํฉํ ๋ dev๋ธ๋์น์ ์๋ก์ด ์์ ๋ด์ญ์ด ์๋ค๋ฉด merge commit ์์ด HEAD๋ง ๋ณ๊ฒฝํ ์ ์๋ค. ์ด๋ฅผ fast-forward(๋นจ๋ฆฌ ๊ฐ๊ธฐ) merge๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์ฆ, ์์ ๋ธ๋์น์ ๋ณ๊ฒฝ์ฌํญ์ด ์์ ๋๋ง fast-forward merge๊ฐ ๊ฐ๋ฅํ๋ค.
feature ๋ธ๋์น์์ ์์ ์ ์๋ฃํ๊ณ dev ๋ธ๋์น๋ก ํฉ์น๋ ค๋๋ฐ, dev ๋ธ๋์น์ ๋ค๋ฅธ ํ์ ์๋ค์ด ์์ ํ ๊ฒฐ๊ณผ๋ฌผ์ด ์๋ก commit๋์ด dev ๋ธ๋์น๊ฐ ๋ฌ๋ผ์ก๋ค๋ฉด?
๋๋ ๋ณดํต github ํ์ด์ง์์ ์ฝ๊ฒ merge๋ฅผ ์งํํ๋ค.
github ํ์ด์ง์์ ํ ์ ์๋ merge๋ ์ธ๊ฐ์ง๊ฐ ์กด์ฌํ๋ค.
์์ ๊ฐ์ด ์กด์ฌํ๋๋ฐ merge ๋ฒํผ ์์ ์๋ ํ ๊ธ์ ์ด๋ฉด merge option ๋ค์ ํ์ธํ ์ ์๋ค. ๊ธฐ๋ณธ์ผ๋ก๋ create a merge commit
์ผ๋ก ์ค์ ๋์ด ์๋ค.
์์์ ์ค๋ช ํ non fast-forward์ด๋ค. base ๋ธ๋์น๋ก merge๋ฅผ ์งํํ ๋ merge commit์ ํตํด ํฉ์น๋ค.
merge ๋ฒํผ์ ๋๋ฅด๋ฉด merge commit์ ์์ฑํ๋ ์นธ์ด ๋์จ๋ค.
๋ค์์ squash and merge์ธ๋ฐ, squash์ ์ฌ์ ์ ์๋ฏธ๋ ๋์ถฉ ๊ณผ์ผ ๊ฐ์ ๊ฒ์ ์ญ์ฑ ์ฐ๋ถ์ํค๋ ๊ฒ์ด๋ค. ๊ณผ์ผ ๋์ .. commit์ ์๊ฐํด๋ณด์!
dev ๋ธ๋์น๋ก mergeํ๋ ์ํฉ์ ๊ฐ์ ํ์ ๋
์ด๋ฐ์์ผ๋ก merge๋๋ ๊ฒ์ด squash merge์ด๋ค.
feature ๋ธ๋์น์ x, y, z ์ปค๋ฐ์ ํ๋๋ก ์ญ์ฑ ํฉ์ณ์ dev ๋ธ๋์น๋ก mergeํ ์ ์๋๋ก ํด์ค๋ค.
squash and merge๋ ์ด๋จ ๋ ์ ์ฉํ ๊น?
๋๋ ์ด๋ฒ ํ๋ก์ ํธ์์ ๋๋๊ธ ๊ธฐ๋ฅ ๊ตฌํ ์ญํ ์ ๋งก์๋ค.
ํ๋ก ํธ๋ก์ ๋๋๊ธ ๊ธฐ๋ฅ ๊ตฌํ์ ํ๊ธฐ ์ํด์๋ ์ฌ๋ฌ commit์ ํ ๊ฒ์ด๋ค.
UI ๋ง๋ค์ด์ผ์ง ..
mocking ํด์ผ์ง ..
ํจ์ ์ฐ๊ฒฐํด์ผ ํ์ง ..
์ด ์คํ์ผ ๋ง์ ์ ๋๋ค ๊ณ ์ณ์ commit ํด์ผ์ง ..
์ด๋ฐ์์ผ๋ก ํ ๊ธฐ๋ฅ๋น ์ฌ๋ฌ commit์ด ๋ฐ์ํ ์ ์๋๋ฐ
์ด commit๋ค์ด dev ๋ธ๋์น commit ๋ด์ญ์ ๋จ๋๋ค๋ฉด ๊ธฐ๋ฅ ๋ณ๋ก commit log๋ฅผ ํ์ธํ๋ ๋ฐ์ ์์ด ๋ถํธํจ์ ๊ฒฉ๊ฒ ๋๊ณ , ๋ฏธ๊ด์์ผ๋ก๋ ์์์ง ์๋ค.
๊ทธ๋ฐ๋ฐ sqaush and merge ๊ธฐ๋ฅ์ ์ด์ฉํ๊ฒ ๋๋ค๋ฉด? ๋ด๊ฐ feature์์ ์์ ํ ์์ ๋ค์ด ํ๋์ ์ปค๋ฐ์ผ๋ก ํฉ์ณ์ง๊ฒ ๋๋ค.
์๋ฅผ ๋ค๋ฉด ๊ธฐ๋ฅ ํ๋๋ก ์ปค๋ฐ์ด ์ญ์ ํฉ์ณ์ง๋ค. (dev ๋ธ๋์น commit log๋ค์ด ์์ฃผ ์๋ป์ง)
๋ด๊ฐ feature ๋ธ๋์น์์ ์งํํ commit๋ค์ ํฉ์ณ์ง commit ํ๋ ์ details๋ก ๋จ๊ฒจ์ง๋ค.
rebase and merge๋ ๋ญ๊น? ์ผ๋จ ์ด๋ฅผ ์๊ธฐ ์ ์ rebase๊ฐ ๋ญ์ง ์์์ผํ๋ค.
rebase
๋ ๊ฐ์ ๊ณตํต base๋ฅผ ๊ฐ์ง branch์์ ํ branch์ base๋ฅผ ๋ค๋ฅธ branch์ ์ต์ commit์ผ๋ก base๋ฅผ ์ฎ๊ธฐ๋ ์์ ! ์ด๋ฆ์์ ์ ์ ์๋ฏ์ด
re
๋ค์ base๋ฅผ ์ค์ ํ๋ ๊ฒ์ด๋ค.
์์๋ก ํ๋ฒ ์ดํดํด๋ณด์
ํ์ฌ ๋๋ feature ๋ธ๋์น์์ ์์ ์ ์งํํ๊ณ ์๋ค.
feature ๋ธ๋์น๋ dev ๋ธ๋์น๋ก๋ถํฐ ํ์๋ ๋ธ๋์น์ด๋ฉฐ b
commit๊น์ง ์์ธ ์ดํ ๋๋ feature ๋ธ๋์น๋ฅผ ์์ฑํ๋ค.
feature ๋ธ๋์น์์ x, y commit์ ํ๋ฉฐ ์ด์ฌํ ์์ ํ๊ณ ์์๋๋ฐ
๋์ ๋๋ฃ ๊ฐ๋ฐ์๊ฐ c, d๋ผ๋ ์์ ์ ์๋ฃํด์ dev์ ๋จธ์ง๋ฅผ ํ๋ค.
dev ๋ธ๋์น๋ ๊ทธ ์ ๊ณผ ์์ ๋ด์ฉ์ด ๋ฌ๋ผ์ก๊ธฐ ๋๋ฌธ์ ๋ด๊ฐ ์์ ์ ์๋ฃํ๊ณ dev๋ก mergeํ ์๊ธฐ์ ์ถฉ๋์ด ๋ ๊ฐ๋ฅ์ฑ์ด ์๋ค. ์ด๋ rebase๋ฅผ ํ์ฉํ ์ ์๋ค.
rebase๋ฅผ ํ์ฉํ๋ฉด ๋ด ๋ธ๋์น์ base commit์ b
์ง๋ง dev์ ์ต์ ์์
๋ด์ฉ์ธ d
๋ก base commit์ ๋ณ๊ฒฝํ ์ ์๋ค! ์ฆ, ์ ๊ณผ ๋ฌ๋ฆฌ ์์ ๊ฐ์ ๊ทธ๋ฆผ์ด ๋๋ค.
base๋ฅผ ๋ฐ๊พผ๋ค๋ ๊ฒ์ ์๊ฒ ๋๋ฐ rebase๋ฅผ ํ์ฉํ๋ฉด ์ป๋ ์ด์ ์ ๋ฌด์์ผ๊น?
1. dev ๋ธ๋์น์ ์ต์ ๋ณ๊ฒฝ์ฌํญ์ ์ฆ๊ฐ ๋ฐ์ํ ์ ์๋ค. (์ฆ, ์ต์ dev์ ์ต์ commit์ ๋ฐ์ํ๋ฉด์ ์์ ์ ํด์ผํ ๋ ์ข๋ค.)
์๋ฅผ ๋ค์ด, ๋๋ ๋๋๊ธ์ ์์ ํ๊ณ ์๊ณ ๋๋ฃ ๊ฐ๋ฐ์๋ ๋๊ธ ๋ถ๋ถ์ ์์ ํ๊ณ ์๋ค๊ณ ๊ฐ์ ํด๋ณด์. ๋๋๊ธ์ ์์ ํ๋ ๋์์, ๋๋ฃ ๊ฐ๋ฐ์์ dev ๋ธ๋์น๋ก merge๊ฐ ์๋ฃ๋ ์์ ์ rebase๋ฅผ ํตํด ๋ฐ๋ก ์ด์ด๋ฐ์ ์์ ์ ์งํํ ์ ์๋ค.!
2. commit ์ด๋ ฅ์ ๋จ๊ธฐ์ง ์์ ๊น๋ํ commit history๋ฅผ ์ ์งํ ์ ์๋ค.
๋ง์ฝ ๋๋ฃ ๊ฐ๋ฐ์๊ฐ ํ ์์ (dev์ merge๋จ)์ด ๋์ ์ฝ๋์์์ ์ถฉ๋์ด ๋ฐ์ํ๋ค๋ฉด?
rebase๋ฅผ ํ์ฉํ์ง ์๋๋ค๋ฉด ์ถฉ๋์ ํด๊ฒฐํ merge commit์ push ํด์ผํด์ commit history๊ฐ ๋๋ฌ์์ง๋ค. ํ์ง๋ง rebase๋ฅผ ํ์ฉํ๋ฉด ๋ด commit๋ค์ด ๋ง์น ์ถฉ๋์ด ๋ฐ์ํ์ง ์์๋ ๊ฒ์ฒ๋ผ ๋๋ฃ ๊ฐ๋ฐ์ commit ๋ค์ ์์นํ๊ฒ ๋๋ฏ๋ก ๊น๋ํ๊ฒ commit history๋ฅผ ์ ์งํ ์ ์๋ค.
์ด ๊ทธ๋ฐ๋ฐ rebase๋ฅผ ํ๋๋ ๊ณ์ ๊ฐ์ ์ถฉ๋์ ํด๊ฒฐํ๋์ ใ ใ ์์ด๋ ์ด๊ฑฐ
์ฒ์ rebase๋ฅผ ์์์ ๋ ๊ณ์ ์ถฉ๋์ด ๋์ ๋๋ ๋ด๊ฐ ๋ญ ์๋ชป ๋ง์ก๊ตฌ๋..๋ง ์๊ฐํ์๋ค.
ํ์ง๋ง ์ด๋ rebase์ ๊ณผ์ ์ ์๊ฐํด๋ณด๋ฉด ์ดํดํ ์ ์๋ค.
์ด ๊ทธ๋ฆผ์์ ๋ค์ ์๊ฐํด๋ณด์.
๋ง์ฝ ๋๋ฃ ๊ฐ๋ฐ์๊ฐ mergeํ pr์ ์์ (c, d)๋ค์ด ๋์ ์ถฉ๋์ด ๋๋ ์์ ์ด์๋ค๋ฉด?
rebase๋ฅผ ๋ฑ ์์ํ์ ๋, ๋ด commit์ x, y๊ฐ ์กด์ฌํ๋ค. ๋ด x, y๋ ๋ชจ๋ b๋ฅผ ๊ธฐ์ค์ผ๋ก ์์ ํ๊ธฐ ๋๋ฌธ์ x, y ๋ ๋ค d ๋ค๋ก ๋ณด๋ด์ฃผ๊ธฐ ์ํด์๋ x, y ๋๋ค ์ถฉ๋์ ํด๊ฒฐํด์ฃผ์ด์ผ ํ๋ค!
์ด๋ฐ ์ด์ ๋ก ๊ณ์ ์ถฉ๋์ ํด๊ฒฐํ๋ผ๋ ๋ฉ์์ง๊ฐ ๋ด๋ ๊ฒ์ด๋ค!
์ด๋ rebase์ ๋จ์ ์ผ๋ก ๊ผฝํ๋ค. commit ๋ง๋ค ์ถฉ๋์ฒ๋ฆฌ๋ฅผ ํด์ฃผ์ด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
๋ค์ rebase and merge๋ก ๋์์๋ณด์.
rebase and merge๋ฅผ ์งํํ๋ฉด ์์ ๊ฐ์ ๊ทธ๋ฆผ์ด ๊ทธ๋ ค์ง ๊ฒ์ด๋ค.
x commit์ base๋ฅผ b์์ d๋ก ๋ณ๊ฒฝํ๋ฉฐ merge๊ฐ ๋๋ค.
rebase and merge๋ฅผ ํ์ฉํ๋ฉด merge commit ์์ด merge๋ฅผ ์งํํ ์ ์๊ณ ,
squash merge์๋ ๋ค๋ฅด๊ฒ ํ๋์ ์ปค๋ฐ์ผ๋ก ํฉ์ณ์ง์ง ์๊ณ pr์ commit ํ๋ํ๋ ์ด์์ dev ๋ธ๋์น๋ก merge ๋๋ค.
์ฐ๋ฆฌํ์์๋ rebase๋ฅผ ํ ํ, squash and mergeํ๋ ์ ๋ต์ ์ฌ์ฉํ๊ณ ์๋ค.
๋ง์ฝ ์ฌ๋์์ ๋๋ฃ ๊ฐ๋ฐ์ ํน์ ๋์ PR์ด merge๋์๋ค๋ ์๋ฆผ์ด ์ค๋ฉด rebase๋ฅผ ์งํํ๋ค.
git fetch origin dev
git rebase origin/dev
์์ ๊ฐ์ด ์ ๋ ฅํ๊ณ rebase๋ฅผ ์งํํ๋ฉฐ ์ถฉ๋์ด ์๋ค๋ฉด ์ถฉ๋์ ํ๋ํ๋ ํด๊ฒฐํด์ค๋ค.
(๋ง์ฝ IDE์ ํ์ฌ ์์
๋ด์ฉ์ด ์๋ค๋ฉด stash
๋ฅผ ํ์ฉํ๋ค.)
rebase๋ฅผ ํ์ฉํ๋ฉด ์ต์ ์์ ๋ด์ฉ์ ๊ฐ์ ธ์ฌ ์ ์๊ณ , ์ถฉ๋ ํด๊ฒฐ์ ์ํ commit์ด ์์ด์ ธ์ ํ์ฉํ๊ณ ์๋ค.
์ดํ, squash and merge๋ฅผ ์งํํ๋๋ฐ ์ด๋ฌ๋ฉด dev์ ๊ธฐ๋ฅ๋ณ๋ก commit์ด ์์ด๊ธฐ ๋๋ฌธ์ commit log๊ฐ ๊น๋ํด์ ธ ์ฌ์ฉํ๊ณ ์๋ค.
์ด๋ฐ ๋๋ ~