[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