Dev_TIMI

์Šค๋‚ต ๊นƒ ๐Ÿช - ์ค‘๊ธ‰ํŽธ #3: ๊น”๋”ํ•œ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์œ„ํ•œ Rebase ์‚ฌ์šฉํ•˜๊ธฐ

by its_TIMI

๐ŸŒŸ Rebase๋ž€?

 

Rebase๋Š” ํ•œ ๋ธŒ๋žœ์น˜์˜ ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜ ์œ„๋กœ ๋‹ค์‹œ ์žฌ๋ฐฐ์น˜ํ•˜๋Š” ์ž‘์—…์ด๋‹ค.

์‰ฝ๊ฒŒ ๋งํ•ด, ๋‚ด๊ฐ€ ์ž‘์—…ํ•œ ์ปค๋ฐ‹์„ ์ตœ์‹  ์ƒํƒœ๋กœ ๊น”๋”ํ•˜๊ฒŒ ์ •๋ ฌํ•ด ์ฃผ๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, ์•„๋ž˜์™€ ๊ฐ™์€ ์ƒํ™ฉ์„ ์ƒ๊ฐํ•ด ๋ณด์ž:

 

main ๋ธŒ๋žœ์น˜์— ์ƒˆ๋กœ์šด ์ปค๋ฐ‹์ด ์ถ”๊ฐ€๋œ ์ƒํ™ฉ:

main: A --- B --- C

feature:        X --- Y

 

 

feature ๋ธŒ๋žœ์น˜๋ฅผ Rebaseํ•˜๋ฉด:

main: A --- B --- C

                   X --- Y

 

 

Rebase๋Š” ๋ณ‘ํ•ฉ ์ปค๋ฐ‹ ์—†์ด ๋ธŒ๋žœ์น˜์˜ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ์ง์„ ์œผ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค.


๐ŸŒŸ Rebase๊ฐ€ ํ•„์š”ํ•œ ์ƒํ™ฉ

1. ๋ธŒ๋žœ์น˜๊ฐ€ ์˜ค๋ž˜๋œ ์ƒํƒœ์ผ ๋•Œ

main ๋ธŒ๋žœ์น˜์— ์ƒˆ๋กœ์šด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ƒ๊ฒผ์„ ๋•Œ, ์ด๋ฅผ merge๋กœ ๊ฐ€์ ธ์˜ค๋Š” ๋Œ€์‹  Rebase๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

2. ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์ •๋ฆฌํ•˜๊ณ  ์‹ถ์„ ๋•Œ

์ค‘๊ฐ„์ค‘๊ฐ„ ํ…Œ์ŠคํŠธ์šฉ ์ปค๋ฐ‹์ด๋‚˜ ๋ถˆํ•„์š”ํ•œ ์ปค๋ฐ‹์„ ํ•˜๋‚˜๋กœ ํ•ฉ์น˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ์—๋„ Rebase๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.


๐ŸŒŸ Rebase ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

 

1. ์ตœ์‹  ์ƒํƒœ๋กœ ์ •๋ฆฌํ•˜๊ธฐ

 

์ž‘์—… ์ค‘์ธ ๋ธŒ๋žœ์น˜(feature)๋ฅผ ์ตœ์‹  ์ƒํƒœ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋ ค๋ฉด:

git checkout feature

git rebase main

 

์ด ๋ช…๋ น์–ด๋Š” main ๋ธŒ๋žœ์น˜์˜ ์ตœ์‹  ์ƒํƒœ๋ฅผ ๊ธฐ์ค€์œผ๋กœ feature ๋ธŒ๋žœ์น˜์˜ ์ปค๋ฐ‹์„ ์žฌ๋ฐฐ์น˜ํ•œ๋‹ค.

 

2. ์ถฉ๋Œ ํ•ด๊ฒฐํ•˜๊ธฐ

 

Rebase ์ค‘ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด๋กœ ์ถฉ๋Œ์„ ํ•ด๊ฒฐํ•œ๋‹ค:

git add ์ถฉ๋Œํ•ด๊ฒฐ๋œํŒŒ์ผ

git rebase --continue

๋ชจ๋“  ์ถฉ๋Œ์ด ํ•ด๊ฒฐ๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜๋ฉด ๋œ๋‹ค.

 

3. Rebase๋ฅผ ์ทจ์†Œํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด

 

Rebase ์ค‘ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๊ฑฐ๋‚˜ ์›๋ž˜ ์ƒํƒœ๋กœ ๋Œ์•„๊ฐ€๊ณ  ์‹ถ๋‹ค๋ฉด:

git rebase --abort

์ด ๋ช…๋ น์–ด๋กœ Rebase ์ด์ „ ์ƒํƒœ๋กœ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.


๐ŸŒŸ ์ž๋™ Rebase ์„ค์ •

 

git pull ์‹œ ๋งค๋ฒˆ Rebase๋ฅผ ์ˆ˜๋™์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ๋ฒˆ๊ฑฐ๋กญ๋‹ค๋ฉด, ์•„๋ž˜ ์„ค์ •์„ ํ†ตํ•ด ์ž๋™ Rebase๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค:

git config --global pull.rebase true

git config --global rebase.autoStash true

 

pull.rebase true: git pull ์‹คํ–‰ ์‹œ ์ž๋™์œผ๋กœ Rebase๋ฅผ ์ˆ˜ํ–‰.

rebase.autoStash true: ์ž‘์—… ์ค‘์ธ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ๋”๋ผ๋„ Rebase ์ „์— ์ž๋™์œผ๋กœ ์ž„์‹œ ์ €์žฅ(stash) ํ›„ ๋‹ค์‹œ ์ ์šฉ.


๐ŸŒŸ Rebase์™€ Merge์˜ ์ฐจ์ด์ 

Rebase: ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ์ •๋ฆฌํ•˜๋ฉฐ, ๋ณ‘ํ•ฉ ์ปค๋ฐ‹์„ ๋‚จ๊ธฐ์ง€ ์•Š๋Š”๋‹ค.

Merge: ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์œ ์ง€ํ•˜๋ฉฐ, ๋ณ‘ํ•ฉ ์ปค๋ฐ‹์ด ์ถ”๊ฐ€๋œ๋‹ค.

 

์˜ˆ์‹œ: Rebase vs Merge

Rebase ๊ฒฐ๊ณผ:

A --- B --- C --- X --- Y

 

 

Merge ๊ฒฐ๊ณผ:

A --- B --- C

       \       \

        X --- Y --- M (merge commit)

 

๐ŸŒŸ Rebase์˜ ์žฅ์ 

ํ˜‘์—… ์‹œ ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ๊ฐ€ ๊น”๋”ํ•ด์ ธ ๋ฆฌ๋ทฐ์™€ ๋””๋ฒ„๊น…์ด ์‰ฌ์›Œ์ง„๋‹ค.

๋ณ‘ํ•ฉ ์ปค๋ฐ‹ ์—†์ด ๋ธŒ๋žœ์น˜๋ฅผ ์ง์„ ์œผ๋กœ ์ •๋ฆฌํ•ด ํžˆ์Šคํ† ๋ฆฌ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.


Rebase๋Š” ๊นƒ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์ •๋ฆฌํ•˜๊ณ , ํ˜‘์—… ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•˜๋Š” ํ˜ผ๋ž€์„ ์ค„์ด๋Š” ๋ฐ ๋งค์šฐ ์œ ์šฉํ•˜๋‹ค. ์ด๋ฒˆ ํŒ์ด Git ์‚ฌ์šฉ ๊ฒฝํ—˜์„ ๋” ํŽธ๋ฆฌํ•˜๊ฒŒ ๋งŒ๋“ค์–ด ์ฃผ์—ˆ๊ธธ ๋ฐ”๋ž€๋‹ค. ๋‹ค์Œ์—๋„ ์œ ์ตํ•œ ๊นƒ ํŒ์œผ๋กœ ์ฐพ์•„์˜ค๊ฒ ๋‹ค. 

๋ฐ˜์‘ํ˜•

๋ธ”๋กœ๊ทธ์˜ ์ •๋ณด

Dev_TIMI

its_TIMI

ํ™œ๋™ํ•˜๊ธฐ