Git์ Rebase๋ ๋ค์ํ ์ฐ์์ด ์์ต๋๋ค๋ง, ์ด๋ฒ ํฌ์คํธ์์๋ ๋ธ๋์น ๋ณํฉ์ Rebase๋ฅผ ํ์ฉํ๋ ๋ฐฉ๋ฒ๊ณผ ๊ทธ ๊ณผ์ ์ ๋ํด ์์ธํ ์์๋ณด๊ฒ ์ต๋๋ค.
๋๊ฐ์ ๋ธ๋์น๊ฐ ์กด์ฌํ๋ ์ํฉ์ผ ๋, ํ๋์ ๋ธ๋์น์์ ๋ค๋ฅธ ๋ธ๋์น๋ก ํฉ์น๊ฒ ๋๋ ๊ฒฝ์ฐ Git์์๋ ์ผ๋ฐ์ ์ผ๋ก ๋ค์ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
1. Merge
2. Rebase
์์ฃผ ์ฌ์ฉํ๋ Merge์ ๋นํด Rebase๋ ์กฐ๊ธ ์์ํ์ ๋ถ๋ค์ด ๋ง์์ง๋ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. Rebase๋ฅผ ์์๋ณด๊ธฐ์ ์์ ๋จผ์ ์ฐ๋ฆฌ์๊ฒ ์ต์ํ Merge์ ๋ํด ๊ฐ๋จํ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
Merge ๋ธ๋์น์์ ์ฌ์ฉํ๋ ์ ๋ต์ ๊ฐ ๋ธ๋์น์ ๋ง์ง๋ง ์ปค๋ฐ ๋ ๊ฐ์ ๊ณตํต ์กฐ์์ ์ด 3๊ฐ์ ์ปค๋ฐ์ ์ด์ฉํ๋ 3-way merge
๋ฅผ ์ํํ์ฌ ์๋ก์ด ์ปค๋ฐ์ ๋ง๋ค์ด๋ด๋ ๊ฒ์
๋๋ค.
๊ฐ๋ น, ๋ค์ ๊ทธ๋ฆผ์์ ๋ณด์ด๋ feature์ master์ ๋ง์ง๋ง ์ปค๋ฐ์ ๊ฐ๊ฐ f2
์ m2
, ๊ทธ๋ฆฌ๊ณ ๊ณตํต ์กฐ์(base)์ ์ปค๋ฐ b
์
๋๋ค. ๋ฐ๋ผ์, ์ด ์ธ ์ปค๋ฐ์ผ๋ก ์ ์ปค๋ฐ์ ๋ง๋ค๊ฒ ๋ฉ๋๋ค. (๋ผ์์ด ๊ธฐ๊ฐ๋งํ์ฃ )
๊ทธ๋ ๋ค๋ฉด ์ฌ๊ธฐ์ 3-way merge
๋ ์ ํํ ์ด๋ค ๊ณผ์ ์ผ๊น์? ๋ง์ง๋ง ์ปค๋ฐ ๋๊ฐ๋ง ๋น๊ตํด์ 2-way merge๋ฅผ ํ๋ฉด ์ ๋๋ ๊ฑธ๊น์?
๋น๊ต๋ฅผ ์ํด ํ์ํ 3๊ฐ์ ์ปค๋ฐ์ ๋ค์ ์ ๋ฆฌํ๋ฉด ํ์ํ ๊ฒ์ ๋ค์ ์ธ ๊ฐ์ง ์ปค๋ฐ์ ๋๋ค.
1. ๋ด ๋ธ๋์น ์ปค๋ฐ
2. ๋จ์ ๋ธ๋์น ์ปค๋ฐ
3. ๋ ๋ธ๋์น์ ๊ณตํต ์กฐ์์ด ๋๋ ์ปค๋ฐ
์ด์ 3-way merge๊ฐ ํจ์จ์ ์ธ ์ด์ ๋ฅผ ์์๋ณด๊ฒ ์ต๋๋ค.
์ฐ์ , ๊ณตํต ์กฐ์์ด ๋๋ Base์ ์ปค๋ฐ๋์ด ๋ณ๊ฒฝ๋ ๋ถ๋ถ์ด a, b, c, d๋ผ๊ณ ๊ฐ์ ํ๊ณ ๋ค์ ํ์ ๊ธฐ๋กํด ๋๊ฒ ์ต๋๋ค.
๋ด ๋ธ๋์น(My)์ ๋จ์ ๋ธ๋์น(Other)์์ ๋ณ๊ฒฝ๋ ๋ด์ญ์ ๊ฐ๊ฐ ์๋์ ํ์ ์ ํ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค.
์ฒซ ๋ฒ์งธ a ๋ฅผ ์ดํด๋ณด๋ฉด ๋ด ๋ธ๋์น์์๋ a๋ถ๋ถ์ ๋ํด ๋ณ๊ฒฝ ์ฌํญ์ด ์์ด ๊ทธ๋๋ก a์ด๋ฉฐ, ๋ค๋ฅธ ์ฌ๋์ a'๋ก ๋ณ๊ฒฝํ์ต๋๋ค. ๋ ๋ฒ์งธ b์์๋ ์์ชฝ ๋ค ๋ณ๊ฒฝ๋์ง ์์์ผ๋ฉฐ, c๋ ๋ ๋ค ์๋ก ๋ค๋ฅธ ๋ด์ฉ์ผ๋ก ๋ณ๊ฒฝํ์ต๋๋ค. ๋ง์ง๋ง d ๋ถ๋ถ์ ๋ด ์ชฝ์์๋ง ๋ณ๊ฒฝํ์ต๋๋ค.
์ด๋, Base๊ฐ ๋๋ ๊ณตํต ์กฐ์ ์ปค๋ฐ์ด ์๊ณ ๋์ ๋ค๋ฅธ ์ฌ๋์ ๋ธ๋์น๋ง ๋น๊ตํ์ฌ Merge๋ฅผ ํ๋ค๊ณ ํด๋ด ์๋ค.
์์ชฝ์์ ๋์ผํ๊ฒ ๊ด์ฐฐ๋๋ b ๋ถ๋ถ์ ์ ์ธํ๊ณ ๋ a๊ฐ ์๋๋ a์๋์ง a'์๋์ง ํ์คํ๊ฒ ์ ํ๊ธฐ๊ฐ ์ด๋ ต์ต๋๋ค. ๋ฐ๋ผ์ ์ถฉ๋์ด ๋ ๊ฒ์ธ์ง์ ์ฌ๋ถ๋ ์ ์๊ฐ ์๋ ๊ฒ์ด์ฃ .
ํ์ง๋ง Base ์ปค๋ฐ์ ํจ๊ป ๋น๊ตํ์ฌ 3-way merge๋ฅผ ์ํํ๋ฉด ๋ค์ ํ์ ๊ฐ์ด Merge ์ปค๋ฐ์ ์ํ๋ฅผ ๋ณด๋ค ๋ช ํํ๊ฒ ๊ฒฐ์ ํ ์ ์๊ฒ ๋ฉ๋๋ค.
๋ค์ ์ ๋ฆฌํ๋ฉด, git์ Merge๋ฅผ ํ ๋ ๊ฐ ๋ธ๋์น์ ๋ง์ง๋ง ์ปค๋ฐ ๋ ๊ฐ, ๋ธ๋์น์ ๊ณตํต ์กฐ์ ์ปค๋ฐ ์ด 3๊ฐ์ ์ปค๋ฐ์ ๋น๊ตํ์ฌ ์๋ก์ด ์ปค๋ฐ์ ๋ง๋ค์ด ๋ณํฉ์ ์ํํฉ๋๋ค.
๋ ๋ธ๋์น๋ฅผ ํฉ์น๋ ๋ ๋ฒ์งธ ๋ฐฉ๋ฒ์ธ Rebase๋ Merge์๋ ๋ค๋ฅด๊ฒ ์ด๋ฆ ๊ทธ๋๋ก ๋ธ๋์น์ ๊ณตํต ์กฐ์์ด ๋๋ base๋ฅผ ๋ค๋ฅธ ๋ธ๋์น์ ์ปค๋ฐ ์ง์ ์ผ๋ก ๋ฐ๊พธ๋ ๊ฒ์
๋๋ค. ๋ ๋ธ๋์น์ ๊ทธ๋ฆผ์ ๋ค์ ๋ณด๊ฒ ์ต๋๋ค.
์ฐ๋ฆฌ๊ฐ rebase๋ฅผ ์ํํ์ฌ ์ป๊ณ ์ ํ๋ ๋ชฉ์ ์ master ๋ธ๋์น์ ๋ง์ง๋ง ์ปค๋ฐ์ธ m2
์ดํ์ feature ์ ๋ณ๊ฒฝ ์ฌํญ์ธ f1
๊ณผ f2
๊ฐ ์ผ์ด๋ ๊ฒ ์ฒ๋ผ ๋ณด์ด๊ฒ ํ๊ณ ์ถ์ ๊ฒ์
๋๋ค.
์ด๋ฐ ๋ชจ์์ผ๋ก์!
์ฆ, feature์ base๋ฅผ b๊ฐ ์๋๋ผ m2๋ก ์ฌ์ค์ (Rebase)ํ๋ ๊ฒ์ ๋๋ค.
Rebase์ ๊ธฐ๋ณธ ์ ๋ต์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋จผ์ Rebase ํ๋ ค๋ ๋ธ๋์น ์ปค๋ฐ๋ค์ ๋ณ๊ฒฝ์ฌํญ์ Patch๋ผ๋ ๊ฒ์ผ๋ก ๋ง๋ ๋ค์์ ์ด๋๊ฐ์ ์ ์ฅํด ๋ก๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฅผ master ๋ธ๋์น์ ํ๋์ฉ ์ ์ฉํ์ฌ ์๋ก์ด ์ปค๋ฐ์ ๋ง๋๋ ๊ฒ์ ๋๋ค.
feature๋ฅผ master ๋ธ๋์น๋ก Rebaseํ๋ ๋ช ๋ น์ด๋ฅผ ์ดํด๋ณด๋ฉด ์ผ๋ จ์ ๋จ๊ณ๋ฅผ ๊ฑฐ์ณ ๋ ๋ธ๋์น์ ๋ณํฉ์ด ์๋ฃ๋ฉ๋๋ค.
1. feature ๋ธ๋์น๋ก checkout
2. master ๋ธ๋์น๋ก rebase
3. feature ๋ธ๋์น๋ฅผ master๋ก fast-forward merge
Rebase๋ฅผ ํ๋๋ฐ ์ Merge๊ฐ ๋์ฌ๊น์? fast-forward merge์ ๋ํด์๋ ์ด ์์์ ์ฐธ๊ณ ํ์ธ์.
์ด์ rebase ๊ณผ์ ์ ํ๋์ฉ ์์ธํ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
git checkout feature
feature ๋ธ๋์น๋ก ์ฒดํฌ์์ํ ์ํ์ ๋๋ค. head๋ feature๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์์ต๋๋ค.
git rebase master
master์ feature์ ๊ณตํต ์กฐ์์ด ๋๋ base ์ปค๋ฐ๋ถํฐ ํ์ฌ ๋ธ๋์น๊น์ง์ ๋ณ๊ฒฝ ์ฌํญ(โต1
, โต2
)์ ๊ตฌํด์ patch๋ก ์ ์ฅํด ๋ก๋๋ค.
head๋ฅผ master๋ก ๋ณ๊ฒฝํฉ๋๋ค.
Applying f1
head๊ฐ ํ์ฌ ๊ฐ๋ฆฌํค๊ณ ์๋ m2
์ ๋ณ๊ฒฝ์ฌํญ โต1
์ ์ ์ฉํ์ฌ ์๋ก์ด ์ปค๋ฐ f1'
์ ์์ฑํฉ๋๋ค.
Applying f2
f1'
์ ๋ณ๊ฒฝ์ฌํญ โต2
์ ์ ์ฉํ์ฌ ์๋ก์ด ์ปค๋ฐ f2'
์ ์์ฑํฉ๋๋ค.
์ด์ feature๊ฐ f2'๋ฅผ ๊ฐ๋ฆฌํค๋๋ก ํฉ๋๋ค.
f1๊ณผ f2๋ ์ ์ฅ์ ๋ด์๋ ์กด์ฌํ์ง๋ง, tag๋ branch์์ ๊ฐ๋ฆฌํฌ ์ ์๋ dangling ์ํ๊ฐ ๋๋ฉฐ, dangling ๋ ์ปค๋ฐ์ ๊ฐ๋น์ง ์ฝ๋ ์ ์ ๋์์ด ๋ฉ๋๋ค.
git merge feature
feature๋ฅผ master๋ก fast-forward mergeํ์ฌ ์๋ฃํฉ๋๋ค.
์ด์ ๊น์ง ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ ๋ธ๋์น ๋ณํฉ ์ ๋ต์ ์ดํด๋ณด์์ต๋๋ค. Merge๋ฅผ ์ฌ์ฉํ ์ง, Rebase๋ฅผ ์ฌ์ฉํ ์ง๋ ํ๋ก์ ํธ์ ํ์คํ ๋ฆฌ๋ฅผ ์ด๋ค ๊ฒ์ผ๋ก ์๊ฐํ๋๋์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค.
๋จผ์ Merge์ ๊ฒฝ์ฐ ํ์คํ ๋ฆฌ๋ ์์ ํ ๋ด์ฉ์ ์ฌ์ค์ ๊ธฐ๋กํ ๊ฒ์ ๋๋ค. Merge๋ก ๋ธ๋์น๋ฅผ ๋ณํฉํ๊ฒ ๋๋ฉด ์ปค๋ฐ ๋ด์ญ์ Merge commit์ด ์ถ๊ฐ๋ก ๋จ๊ฒ ๋ฉ๋๋ค. ๋ฐ๋ผ์ Merge๋ฅผ ์ฌ์ฉํ๋ฉด ๋ธ๋์น๊ฐ ์๊ธฐ๊ณ ๋ณํฉ๋๋ ๋ชจ๋ ์์ ๋ด์ฉ์ ๊ทธ๋๋ก ๊ธฐ๋กํ๊ฒ ๋ฉ๋๋ค.
๋ค์์ผ๋ก Rebase์ ๊ฒฝ์ฐ๋ ๋ธ๋์น๋ฅผ ๋ณํฉํ ๋ ์ด๋ฐ Merge commit์ ๋จ๊ธฐ์ง ์์ผ๋ฏ๋ก, ๋ง์น ๋ค๋ฅธ ๋ธ๋์น๋ ์์๋ ๊ฒ์ฒ๋ผ ํ๋ก์ ํธ์ ์์
๋ด์ฉ์ด ํ๋์ ํ๋ฆ์ผ๋ก ์ ์ง๋ฉ๋๋ค.
๋ธ๋์น๋ฅผ ํฉ์น ๋ Merge๋ฅผ ์จ์ผ ํ๋์ง Rebase๋ฅผ ์จ์ผ ํ๋์ง์ ๋ํด์๋ ์ ๋ต์ด ์์ต๋๋ค. ํ๋ก์ ํธ๋ ํ์ ์ํฉ์ ๋ฐ๋ผ ๋ค๋ฅธ ์ ๋ต์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ค๋ง, ๋ก์ปฌ์์๋ ํ์คํ ๋ฆฌ ์ ๋ฆฌ๋ฅผ ์ํด Rebase๋ฅผ ํ ์๋ ์์ง๋ง ์ด๋ฏธ ์๊ฒฉ ์ ์ฅ์์ Push๋ ์ปค๋ฐ์ Rebase๋ฅผ ํ์ง ์๋ ๊ฒ์ด ์ผ๋ฐ์ ์ ๋๋ค.
์๊ฐ์ ์ผ๋ก ์ ๋ฌํด์ฃผ์๋ ์ดํด๊ฐ ๋ ์ฝ๋ค์
์ ๋งคํ๋๊ฒ๋ค์ด ์กฐ๊ธ ๋ ๋ช
ํํด์ง๊ฑฐ๊ฐ์์:)
์ ๋ upstream์ ๋จธ์ง์๋ ์ํฉ์์ local ๋ธ๋์น์์ master๊ฐ ์๋ ์๋ก์ด ๋ธ๋์น๋ฐ์ ์์ ํ๋ค๊ฐ ๋์ค์ ๋จธ์ง๋๊ฒฝ์ฐ master๋ฅผ pull ์ํด์์ conflict๊ฐ ๋งจ๋ ๋๋๋ผ๊ตฌ์ ใ ใ ๋ฆฌ๋ฒ ์ด์ค ์ฒ์๊ณต๋ถํ ๋ ๋ ์ด๋ ค์ ์ด์ ใ ใ
3 way merge์ ๋ํด์ ์ ์ค๋ช ํด์ฃผ์ ๋ถ๋ถ๋ ์์ ์ข์์ด์. ๋งจ๋ ์ฐ๋๊ฒ๋ง ์ฐ๋ค๋ณด๋ git์ ์๋ฆฌ๋ฅผ ํญ์ ๊น๋จน๋๋ฐ.. ๋จธ์ง ์ปค๋ฐ์ด ๋ญ ๊ธฐ์ตํ๋์ง์ ๋ํด ๊ทธ๋ฆผ์ผ๋ก ์ค๋ช ํด์ฃผ์ ์ ์ข์์ต๋๋ค!!
3way-merge์ rebase ์ ๋ํด์ ์์ ๊น๋ํ๊ฒ ์งฑ์งฑ ์ ๋ฆฌํด์ฃผ์ ๊ฒ๊ฐ์์... ๊ฐ์ฌํฉ๋๋ค!!!