[Git] branch ๊ด๋ฆฌ: merge vs rebase
์ด๊ฑด ๊ฐ์ธ ๊ฐ์ ํธ๋ถํธ๊ฐ ์ข ์๋ ๋ถ๋ถ์ด๋ค.
๋ด๊ฐ ํ ์์
์ ๋ฉ์ธ ๋ธ๋์น์ ๋ณํฉํ๊ฑฐ๋, ๋ค๋ฅธ ์ฌ๋์ด ์์
ํ ๊ฒ์ ๋ด ์์
์ผ๋ก ๊ฐ์ ธ์ค๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น?
์ฌ๊ธฐ์๋ ํฌ๊ฒ 2๊ฐ์ง์ ๋ฐฉ๋ฒ์ด ์๋ค.
์ผ๋ฐ merge
git merge๋ ๊ฐ์ฅ ๊ธฐ์ด์ ์ธ ๋ธ๋์น ๊ฒฐํฉ ๋ฐฉ๋ฒ์ด๋ค.
๋ธ๋์น๋ฅผ ๋ค๋ฅธ ๋ธ๋์น์ ๊ฒฐํฉํ๋ ๊ฒ ์์ฒด๋ฅผ ํ๋์ ์ปค๋ฐ์ผ๋ก ๊ฐ์ฃผํ๊ณ ์์ฑํ๋ค.
๊ธฐ์กด ์ปค๋ฐ๋ค์ ๊ฑด๋๋ฆฌ๊ฑฐ๋ ๋ณ์กฐํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ฆฌ์คํฌ๊ฐ ์ ๊ณ ํฌ๋ช ํ๋ค๋ ์ฅ์ ์ด ์๋ค.
๋จ์ ์... ์ปค๋ฐ ํ์คํ ๋ฆฌ๊ฐ ์ง์ ๋ถํด์ง ์ ์๋ค๋ ๊ฒ์ด๋ค. ์์ํ ์์ ๋ด์ญ๊ณผ ๋ณ๊ฐ๋ก, ๋จธ์ง์ปค๋ฐ์ด ์์ฌ์ ๋ณด์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์ ์ฌ์ง์ ๊ฒฝ์ฐ์๋ ๊ทธ๋ฅ ์์
๋จ์ merge๋ง ์์ด์ ๊ทธ๋๋ง ๋ซ๋ค.
merge๋ฅผ ์จ์ ๋ฉ์ธ๋ธ๋์น์ ์ต์ ์ฌํญ์ ๋ด ๋ธ๋์น์ ๋๊ธฐํํ๋ ๋น๋๊ฐ ๋์์ง๋ค๋ฉด ์ง์ง ๋๋ฌ์์ง ์ ์๋ค.
rebase & squash
๊ทธ๋์ ์ ๋ฐ ๋จธ์ง ๋ฒ๋ฒ ์ ๊บผ๋ฆฌ๋ ๊ฒฝ์ฐ์๋, rebase๋ฅผ ์ด์ฉํ๋ ๊ฒ์ ์ ํธํ๋ค. ๋จธ์ง์ปค๋ฐ์ ์์ง ์๊ณ ์ ํ์ ์ผ๋ก ์ปค๋ฐ ํ์คํ ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒ์ด๋ค.
๋ง์น ํ ์ฌ๋์ด ๋จ์ผ ๋ธ๋์น์ ๋ค pushํ๊ฒ์ฒ๋ผ.
๊ทธ๋ฆฌ๊ณ ์ด rebase๋ ๊ฒ์ ์ปค๋ฐ ํ์คํ ๋ฆฌ๋ฅผ ์กฐ์ํ๊ณ ๋ณ์กฐํ๋ ์ข
๋ฅ์ ๋ช
๋ น์ด๋ค.
๋ง์ฝ ๋ค๋ฅธ ์ฌ๋์ ์์ ์ ๋ด ๋ธ๋์น๋ก ๊ฐ์ ธ์ค๊ณ ์ถ๋ค๋ฉด, ํน์ ์ต์ ์ฌํญ์ ๋๊ธฐํํ๊ณ ์ถ๋ค๋ฉด "git rebase origin/๋ธ๋์น"์ ๋ช ๋ น์ ์ฌ์ฉํ ์ ์๋ค.
๊ทธ๋ฌ๋ฉด ๋จธ์ง์ปค๋ฐ์ ์์ง ์๊ณ ๋ด๊ฐ ์์
ํ ์ปค๋ฐ์ ์ต์ ์ผ๋ก ๋ฏธ๋ค์ ์ฌ์์ฑํด๋ฒ๋ฆฐ๋ค!
์ปค๋ฐ ํด์๋ ๋ฐ๋๊ธฐ ๋๋ฌธ์ ์ฌ์ค์ ์ปค๋ฐ์ ๋ค์ ์ฐ๋ ๊ฒ์ด๋ ๋ค๋ฆ ์๊ธด ํ์ง๋ง, ์ปค๋ฐ์ด ์ง์ ๋ถํ๊ฒ ๋จ์ง๋ ์๋๋ค๋ ์ฅ์ ์ด ์๋ค.
๋ด๊ฐ ์์
ํ ๊ฒฐ๊ณผ๋ฌผ์ ๋ฉ์ธ ๋ธ๋์น์ ๋จธ์งํ ๋๋ rebase merge๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
์ด๋ฌ๋ฉด ๋จธ์ง์ปค๋ฐ์ ์์ง ์๊ณ ์ปค๋ฐ ์์ฒด๋ฅผ ๋ฉ์ธ ๋ธ๋์น์ ์ค์
๋ฃ์ด๋ฒ๋ฆฐ๋ค.
๋จ, ์ด๋ฌ๋ฉด ํด๋น ์์ ๋จ์์ ํ์คํ ๋ฆฌ๋ฅผ ์๊ธฐ๊ฐ ์ด๋ ค์์ ์ปค๋ฐ๋ฉ์ธ์ง์ ์ถ์ ๊ฐ๋ฅํ ์ด์ ๋ฒํธ ๋ฑ์ ์ ๋ ๊ฒ์ด ๊ถ์ฅ๋๋ค.
squash merge๋ rebase merge์ ์๋ฆฌ๋ ๊ฑฐ์ ๊ฐ๋ค. ๊ทธ๋ฅ ์ปค๋ฐ๋ค์ ๋จ์ผ์ปค๋ฐ์ผ๋ก ๋ญ๊ฐ์ ๋ฃ๋๊ฒ ๋ค๋ฅผ ๋ฟ์ด๋ค.
๋จ์
rebase๊ฐ ์ ๋ง ๊น๋ํ๊ณ ์ข๊ธด ํ๋ฐ, ์ปค๋ฐํด์๊ฐ ๋ณ์กฐ๋๋ค๋ ๊ฒ์ด ๋์ฐํ ๋ถ์์ฉ์ผ๋ก ๋์์ฌ ๋๋ ์๋ค.
์์ ํ ๋ธ๋์น๊ฐ ์ผํ์ฑ ๋ธ๋์น๋ผ๋ฉด, ๊ทธ๋ฅ rebase merge๋ฅผ ํด๋ฒ๋ฆฌ๊ณ ๋ธ๋์น๋ฅผ ํ๊ดดํ๋ฉด ์๋ฌด ๋ฌธ์ ๊ฐ ์๋ค.
๊ทผ๋ฐ ์๋ช
์ฃผ๊ธฐ๊ฐ ์๋ ๋ธ๋์น๋ผ๋ฆฌ rebase๋ฅผ ๋จ๋ฐํ๋ฉด ๋ฌธ์ ๊ฐ ์ข ์๊ธธ ์๋ ์๋ค.
์ปค๋ฐ์ ๋ค์ ๋ง๋๋ ๊ฒ์ด๋ผ์, ์ค์ ๋ก๋ ๊ฐ์ ์ปค๋ฐ์ด์ง๋ง ๋ค๋ฅด๋ค๊ณ ํ๋จ๋ผ์ ๊ณค๋ํ ์ถฉ๋์ด ๋ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๋ด๋๋ ๊ทธ๋ฅ merge๋ฅผ ์จ์๋ผ๋ ์ปค๋ฐ์ ์ ์งํด์ ๋์ง์ฑ์ ๋ณด์กดํด์ผ ํ๋ค.
์๋ฌดํผ ๋ด ๊ฒฝ์ฐ์๋ rebase๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ์ฐ๋, ํ์ํ ๊ฒฝ์ฐ์๋ง merge๋ฅผ ์ฐ๋ ๊ฒ์ด ์ข๋ค๊ณ ์๊ฐํ๋ค.
์ฐธ์กฐ
https://git-scm.com/book/ms/v2/Git-Branching-Rebasing
https://www.atlassian.com/git/tutorials/merging-vs-rebasing