Dev_TIMI

์Šค๋‚ต๊นƒ ๐Ÿช - ์ค‘๊ธ‰ํŽธ #8: Rebase ์ค‘ ๋ฐœ์ƒํ•˜๋Š” ์ถฉ๋Œ ํ•ด๊ฒฐํ•˜๊ธฐ

by its_TIMI

๐Ÿ”น Rebase ์ค‘ ๋ฐœ์ƒํ•˜๋Š” ์ถฉ๋Œ ํ•ด๊ฒฐ๋ฒ•

Git์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ Merge Conflict(๋ณ‘ํ•ฉ ์ถฉ๋Œ)์€ ํ•œ ๋ฒˆ์ฏค ๊ฒช์–ด๋ดค์„ ๊ฒƒ์ด๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ Git์„ ๋”์šฑ ๊น”๋”ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด Rebase๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๊ณผ์ •์—์„œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

 

๐Ÿ’ก “Merge ์ถฉ๋Œ๊ณผ Rebase ์ถฉ๋Œ์˜ ์ฐจ์ด๋Š” ๋ฌด์—‡์ผ๊นŒ?”

๐Ÿ’ก “Rebase ์ค‘ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•ด์•ผ ํ• ๊นŒ?”

 

์ด ๊ธ€์—์„œ๋Š” Rebase ์ค‘ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋Š” ์ด์œ ์™€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋‹จ๊ณ„๋ณ„๋กœ ์ •๋ฆฌํ•œ๋‹ค.


1๏ธโƒฃ Rebase๋ž€?

git rebase๋Š” ํ•œ ๋ธŒ๋žœ์น˜์˜ ๊ธฐ๋ฐ˜(base)์„ ๋ณ€๊ฒฝํ•˜์—ฌ ์ตœ์‹  ์ปค๋ฐ‹ ์œ„๋กœ ์žฌ๋ฐฐ์น˜ํ•˜๋Š” ๊ณผ์ •์ด๋‹ค.

์ฆ‰, ๊ธฐ์กด ๋ธŒ๋žœ์น˜์˜ ์ปค๋ฐ‹์„ ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜์˜ ์ตœ์‹  ์ƒํƒœ๋ฅผ ๋ฐ˜์˜ํ•œ ํ›„ ๋‹ค์‹œ ์ ์šฉํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

๐Ÿ”น Merge์™€ Rebase์˜ ์ฐจ์ด

๋น„๊ต ํ•ญ๋ชฉ Merge Rebase
์ด๋ ฅ ๊ตฌ์กฐ ๋ธŒ๋žœ์น˜๊ฐ€ ๋ณ‘ํ•ฉ๋˜๋ฉฐ, ๋ถ„๊ธฐ๋œ ๊ธฐ๋ก ์œ ์ง€ ๊ธฐ์กด ์ปค๋ฐ‹์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์žฌ์ ์šฉํ•˜์—ฌ ๋‹จ์ผ ์ด๋ ฅ ์ƒ์„ฑ
๋ณ‘ํ•ฉ ์ปค๋ฐ‹ ์ƒˆ ๋ณ‘ํ•ฉ ์ปค๋ฐ‹(merge commit)์ด ์ƒ์„ฑ๋จ ๋ณ‘ํ•ฉ ์ปค๋ฐ‹ ์—†์ด ํžˆ์Šคํ† ๋ฆฌ๊ฐ€ ์ •๋ฆฌ๋จ
์ถฉ๋Œ ํ•ด๊ฒฐ ๋ฐฉ์‹ ๋ณ‘ํ•ฉ ์‹œ ํ•œ ๋ฒˆ๋งŒ ์ถฉ๋Œ ํ•ด๊ฒฐ ๊ฐœ๋ณ„ ์ปค๋ฐ‹์„ ์žฌ์ ์šฉํ•˜๋ฉด์„œ ์ถฉ๋Œ ๋ฐœ์ƒ ๊ฐ€๋Šฅ
์‚ฌ์šฉ ์‚ฌ๋ก€ ํ˜‘์—…์—์„œ ๋ธŒ๋žœ์น˜ ๊ฐ„ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ช…ํ™•ํžˆ ๋‚จ๊ฒจ์•ผ ํ•  ๋•Œ ๊ฐœ์ธ ์ž‘์—…์„ ์ •๋ฆฌํ•˜๊ฑฐ๋‚˜ ๊น”๋”ํ•œ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์œ ์ง€ํ•  ๋•Œ

 

๐Ÿ“Œ ์ฆ‰, Rebase๋Š” ๊ธฐ์กด ๋ธŒ๋žœ์น˜๋ฅผ ์ƒˆ๋กœ์šด ๊ธฐ๋ฐ˜ ์œ„์— ๋‹ค์‹œ ์ ์šฉํ•˜๋Š” ๋ฐฉ์‹์ด๋ฏ€๋กœ, ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ํ™•๋ฅ ์ด ๋†’๋‹ค.


2๏ธโƒฃ Rebase ์ค‘ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋Š” ์ด์œ 

Rebase๋Š” ๊ฐ ์ปค๋ฐ‹์„ ํ•˜๋‚˜์”ฉ ์žฌ์ ์šฉํ•˜๋Š” ๊ณผ์ •์ด๊ธฐ ๋•Œ๋ฌธ์—,

โœ… ๊ธฐ์กด ์ฝ”๋“œ์™€ ์ถฉ๋Œํ•˜๋Š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ๋‹ค๋ฉด Rebase๊ฐ€ ์ค‘๋‹จ๋  ์ˆ˜ ์žˆ๋‹ค.

 

Rebase ๋„์ค‘ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋Š” ๋Œ€ํ‘œ์ ์ธ ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

1๏ธโƒฃ ๊ธฐ์กด ์ปค๋ฐ‹์—์„œ ์ˆ˜์ •ํ•œ ํŒŒ์ผ์„, Rebaseํ•˜๋ ค๋Š” ๋ธŒ๋žœ์น˜์—์„œ๋„ ๋ณ€๊ฒฝํ•œ ๊ฒฝ์šฐ

2๏ธโƒฃ ์‚ญ์ œ๋œ ํŒŒ์ผ์„ Rebase ๋„์ค‘ ๋‹ค์‹œ ์ˆ˜์ •ํ•˜๋ ค๊ณ  ํ•  ๊ฒฝ์šฐ

3๏ธโƒฃ Rebase ๋„์ค‘ ์ ์šฉํ•˜๋ ค๋Š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ๊ณผ ํ˜„์žฌ ์ฝ”๋“œ๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ

 

โšก ์ฆ‰, Git์ด “์–ด๋Š ์ชฝ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋งž๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค!“๋ผ๊ณ  ํŒ๋‹จํ•  ๋•Œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•œ๋‹ค.


3๏ธโƒฃ Rebase ์ค‘ ์ถฉ๋Œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

Rebase ๋„์ค‘ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด Git์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฉ”์‹œ์ง€๋ฅผ ๋„์šด๋‹ค.

error: could not apply 123abc... Fix typo in README

 

๐Ÿ“Œ ์ด ๋ฉ”์‹œ์ง€๋Š” ๋ฌด์—‡์„ ์˜๋ฏธํ• ๊นŒ?

  • 123abc → Rebase ์ค‘์ด๋˜ ํŠน์ • ์ปค๋ฐ‹์˜ ํ•ด์‹œ ๊ฐ’
  • "Fix typo in README" → ํ•ด๋‹น ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€
  • “์ด ์ปค๋ฐ‹์„ ์ ์šฉํ•˜๋ ค๋‹ค ์ถฉ๋Œ์ด ๋ฐœ์ƒํ–ˆ์œผ๋‹ˆ ํ•ด๊ฒฐํ•ด์•ผ ํ•œ๋‹ค!”

์ด์ œ ํ•ด๊ฒฐํ•ด ๋ณด์ž.

1๏ธโƒฃ Rebase ์ง„ํ–‰ ์ค‘ ์ƒํƒœ ํ™•์ธํ•˜๊ธฐ

git status

โœ… Git์ด ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•œ ํŒŒ์ผ์„ ์ถœ๋ ฅํ•ด ์ค€๋‹ค.

โœ… ์ด ํŒŒ์ผ๋“ค์„ ์ˆ˜์ •ํ•ด์•ผ Rebase๋ฅผ ๊ณ„์† ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.


2๏ธโƒฃ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•œ ํŒŒ์ผ ์ˆ˜์ •ํ•˜๊ธฐ

์ถฉ๋Œ์ด ๋ฐœ์ƒํ•œ ํŒŒ์ผ์„ ์—ด์–ด๋ณด๋ฉด, Git์ด Conflict Markers(์ถฉ๋Œ ํ‘œ์‹œ)๋ฅผ ๋‚จ๊ฒจ ๋†“๋Š”๋‹ค.

<<<<<<< HEAD
console.log("๋‚˜๋Š” main ๋ธŒ๋žœ์น˜ ์ฝ”๋“œ!");
=======
console.log("๋‚˜๋Š” feature ๋ธŒ๋žœ์น˜ ์ฝ”๋“œ!");
>>>>>>> feature-branch

โœ… HEAD ์•„๋ž˜๋Š” ํ˜„์žฌ ๋ธŒ๋žœ์น˜(main)์˜ ์ฝ”๋“œ

โœ… ======= ์•„๋ž˜๋Š” Rebase ๋„์ค‘ ์ ์šฉํ•˜๋ ค๋Š” ์ฝ”๋“œ

 

๐Ÿ”น ์›ํ•˜๋Š” ์ฝ”๋“œ๋กœ ์ˆ˜์ •ํ•œ ํ›„ ์ €์žฅํ•œ๋‹ค.

console.log("์ตœ์ข… ์ฝ”๋“œ: ์ตœ์‹  ๋ธŒ๋žœ์น˜ ์ฝ”๋“œ ๋ฐ˜์˜!");

3๏ธโƒฃ ์ˆ˜์ •ํ•œ ํŒŒ์ผ์„ Git์— ๋ฐ˜์˜ํ•˜๊ณ  Rebase ๊ณ„์† ์ง„ํ–‰ํ•˜๊ธฐ

git add <์ถฉ๋Œ ํŒŒ์ผ>
git rebase --continue

โœ… git add . → ์ถฉ๋Œ ํ•ด๊ฒฐํ•œ ํŒŒ์ผ์„ ์Šคํ…Œ์ด์ง•

โœ… git rebase --continue → Rebase๋ฅผ ๊ณ„์† ์ง„ํ–‰

 

๐Ÿ“Œ Rebase๊ฐ€ ์™„์ „ํžˆ ๋๋‚  ๋•Œ๊นŒ์ง€ ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•  ์ˆ˜ ์žˆ๋‹ค.


4๏ธโƒฃ Rebase ๋„์ค‘ ์‹ค์ˆ˜ํ–ˆ์„ ๋•Œ ๋˜๋Œ๋ฆฌ๊ธฐ

Rebase ๋„์ค‘ ์‹ค์ˆ˜ํ•˜๊ฑฐ๋‚˜,

“์•„, ์ด๊ฑฐ ๊ทธ๋ƒฅ ๋‹ค์‹œ ์ฒ˜์Œ๋ถ€ํ„ฐ ํ•ด์•ผ๊ฒ ๋‹ค!๐Ÿคฆ๐Ÿป‍โ™€๏ธ” ์‹ถ๋‹ค๋ฉด ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

 

1๏ธโƒฃ Rebase๋ฅผ ์™„์ „ํžˆ ์ค‘๋‹จํ•˜๊ณ  ์›๋ž˜ ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆฌ๊ธฐ

git rebase --abort

โœ… Rebase๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์ „ ์ƒํƒœ๋กœ ๋Œ์•„๊ฐ„๋‹ค.

โœ… ์•„๋ฌด๊ฒƒ๋„ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ ์ดˆ๊ธฐํ™”๋จ.


2๏ธโƒฃ ํ˜„์žฌ ์ถฉ๋Œ๋‚œ ์ปค๋ฐ‹๋งŒ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

git rebase --skip

โœ… ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•œ ์ปค๋ฐ‹์„ ๊ฑด๋„ˆ๋›ฐ๊ณ (Rebase์—์„œ ์ œ์™ธํ•˜๊ณ ) ๊ณ„์† ์ง„ํ–‰.

โœ… ํ•˜์ง€๋งŒ, Rebase ์ดํ›„ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ œ๋Œ€๋กœ ๋ฐ˜์˜๋˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์œผ๋ฏ€๋กœ ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค.


3๏ธโƒฃ ์ถฉ๋Œ ํ•ด๊ฒฐ ํ›„ Rebase ๊ณ„์† ์ง„ํ–‰ํ•˜๊ธฐ

git rebase --continue

โœ… ์ˆ˜์ •ํ•œ ํŒŒ์ผ์„ Git์— ๋ฐ˜์˜ํ•œ ํ›„, Rebase๋ฅผ ๊ณ„์† ์ง„ํ–‰ํ•œ๋‹ค.


5๏ธโƒฃ Rebase ์ถฉ๋Œ ํ•ด๊ฒฐ ๊ณผ์ • ์ •๋ฆฌ

๋‹จ๊ณ„ ๋ช…๋ น์–ด ์„ค๋ช…
1๏ธโƒฃ git status ์ถฉ๋Œ ๋ฐœ์ƒํ•œ ํŒŒ์ผ ํ™•์ธ
2๏ธโƒฃ ํŒŒ์ผ ์ˆ˜์ • <<<<<<< ======= >>>>>>> ์‚ฌ์ด์˜ ์ฝ”๋“œ ์ˆ˜์ •
3๏ธโƒฃ git add <ํŒŒ์ผ๋ช…> ์ˆ˜์ •ํ•œ ํŒŒ์ผ Git์— ๋ฐ˜์˜
4๏ธโƒฃ git rebase --continue Rebase ๊ณ„์† ์ง„ํ–‰
๐Ÿ’ก git rebase --abort Rebase ์ค‘๋‹จ (๋˜๋Œ๋ฆฌ๊ธฐ)
๐Ÿ’ก git rebase --skip ํ˜„์žฌ ์ถฉ๋Œ ์ปค๋ฐ‹ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

๐Ÿ”น ๊ฒฐ๋ก 

  • Rebase๋Š” Git ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ด๋‹ค.
  • ํ•˜์ง€๋งŒ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด Merge๋ณด๋‹ค ๋ณต์žกํ•œ ๊ณผ์ •์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ถฉ๋Œ์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ฐจ๊ทผ์ฐจ๊ทผ ํ•ด๊ฒฐํ•˜๋ฉด ๋œ๋‹ค.
  • ๋งŒ์•ฝ ์‹ค์ˆ˜ํ–ˆ๋‹ค๋ฉด git rebase --abort๋กœ ๋˜๋Œ๋ฆด ์ˆ˜๋„ ์žˆ๋‹ค.

 

๐Ÿ”ฅ Rebase๋ฅผ ํ™œ์šฉํ•˜๋ฉด ํ˜‘์—… ์ค‘์—๋„ ๋” ๊น”๋”ํ•œ Git ์ด๋ ฅ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค!

๋‹ค์Œ ๊ธ€์—์„œ๋Š” Rebase๋ฅผ ํ™œ์šฉํ•œ ์‹ค์ „ Git ์ •๋ฆฌ๋ฒ•์„ ๋‹ค๋ฃฐ ์˜ˆ์ •์ด๋‹ค. ๐Ÿš€

๋ฐ˜์‘ํ˜•

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

Dev_TIMI

its_TIMI

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