Git, GitHub

git rebase ๋™์ž‘ ๊ณผ์ •, ์ฃผ์˜์‚ฌํ•ญ, merge vs rebase

9taetae9 2025. 1. 10. 16:24
728x90

 

git rebase : ํ•œ ๋ธŒ๋žœ์น˜์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜ ์œ„๋กœ ์žฌ๋ฐฐ์น˜์‹œํ‚ค๋Š” ๋ช…๋ น์–ด

 

Rebase์˜ ์žฅ์ 

  1. ๋ณ‘ํ•ฉ ์ปค๋ฐ‹์ด ์—†์–ด ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ์ •๋ฆฌ ๊ฐ€๋Šฅํ•˜๊ณ  ๊ฐ€๋…์„ฑ์ด ์ข‹์Œ
  2. ํŠน์ • ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ปค๋ฐ‹๋“ค์„ ์—ฐ์†์ ์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ์–ด ์ฝ”๋“œ ๋ฆฌ๋ทฐ๊ฐ€ ์šฉ์ด

 

Rebase ์‚ฌ์šฉ ์˜ˆ

๋‘ ๊ฐœ์˜ ๋ธŒ๋žœ์น˜๋กœ ๋‚˜๋ˆ„์–ด์ง„ ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ

์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๋‘ ๊ฐœ์˜ ๋ธŒ๋žœ์น˜๋กœ ๋‚˜๋ˆ„์–ด์ง„ ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ํ•ฉ์น˜๊ณ  ์‹ถ์€ ์ƒํ™ฉ์—์„œ ์šฐ๋ฆฌ๋Š” merge ๋ช…๋ น์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

$ git chekcout main
Switched to branch 'main'
$ git merge experiment
Merge made by the 'recursive' strategy.

merge ๋ช…๋ น ์‹คํ–‰์‹œ ํ˜„์žฌ ๋ธŒ๋žœ์น˜(main)๊ฐ€๋ฆฌํ‚ค๋Š” ์ปค๋ฐ‹(c3)๊ฐ€ mergeํ•  ๋ธŒ๋žœ์น˜(experiment)์˜ ์กฐ์ƒ์ด ์•„๋‹ˆ๋ฏ€๋กœ 3-way merge๋ฅผ ํ•œ๋‹ค.

๋”ฐ๋ผ์„œ ์•„๋ž˜์™€ ๊ฐ™์ด merge commit(c5)๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  main ๋ธŒ๋žœ์น˜๋Š” merge commit์„ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋œ๋‹ค.

git merge experiment ์‹คํ–‰ ๊ฒฐ๊ณผ

 

์ด์™€ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ rebase๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด merge commit ์ƒ์„ฑ์—†์ด ๊น”๋”ํ•œ ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์œ ์ง€ํ•˜๋ฉฐ ์ž‘์—…์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

$ git checkout experiment
$ git rebase main
First, rewinding head to replay your work on top of it...
Applying: added staged command

 

 rebase ๋™์ž‘ ๊ณผ์ •

  1. ๊ณตํ†ต ์กฐ์ƒ ์ฐพ๊ธฐ
    • ํ˜„์žฌ ๋ธŒ๋žœ์น˜(experiment)์™€ rebase ๋Œ€์ƒ ๋ธŒ๋žœ์น˜(main)์˜ ๊ณตํ†ต ์กฐ์ƒ์„ ์ฐพ์Œ
  2. ๋ณ€๊ฒฝ์‚ฌํ•ญ(diff) ์ˆ˜์ง‘
    • ํ˜„์žฌ ๋ธŒ๋žœ์น˜์˜ ๊ฐ ์ปค๋ฐ‹๋“ค์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ˆ˜์ง‘
    • ์ด ๋ณ€๊ฒฝ์‚ฌํ•ญ๋“ค์„ ์ž„์‹œ ํŒŒ์ผ๋กœ ์ €์žฅ
  3. ๋ธŒ๋žœ์น˜ ๋ฆฌ์…‹
    • ํ˜„์žฌ ๋ธŒ๋žœ์น˜(experiment)๋ฅผ rebase ๋Œ€์ƒ ๋ธŒ๋žœ์น˜(main)์˜ ์ตœ์‹  ์ปค๋ฐ‹์œผ๋กœ ๋ฆฌ์…‹
  4. ๋ณ€๊ฒฝ์‚ฌํ•ญ ์žฌ์ ์šฉ
    • ์ž„์‹œ ์ €์žฅํ•ด๋‘” ๋ณ€๊ฒฝ์‚ฌํ•ญ๋“ค์„ ์ˆœ์„œ๋Œ€๋กœ ์ƒˆ๋กœ์šด ์ปค๋ฐ‹์œผ๋กœ ๋งŒ๋“ค์–ด ์ ์šฉ

 

rebase๋ฅผ ํ†ตํ•œ c4์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ main ๋ธŒ๋žœ์น˜ c3 ์œ„๋กœ ์žฌ๋ฐฐ์น˜

 

 

main ๋ธŒ๋žœ์น˜ ํฌ์ธํ„ฐ์˜ ์ด๋™์€ ๋ณ„๋„๋กœ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— main ๋ธŒ๋žœ์น˜๋กœ ๋Œ์•„์™€ Fast-forwardํ•˜์—ฌ ๋งˆ๋ฌด๋ฆฌํ•œ๋‹ค.

$ git checkout main
$ git merge experiment

 

main ๋ธŒ๋žœ์น˜ Fast-forwarding

์ด์ฒ˜๋Ÿผ rebase๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ผ์„ ๋ณ‘๋ ฌ๋„ ์ง„ํ–‰ํ•œ ์ƒํ™ฉ์—๋„ rebase ํ›„์—๋Š” ๋ชจ๋“  ์ž‘์—…์ด ์ฐจ๋ก€๋กœ ์ˆ˜ํ–‰๋œ ๊ฒƒ์ฒ˜๋Ÿผ ํžˆ์Šคํ† ๋ฆฌ๊ฐ€ ์„ ํ˜•์ด ๋œ๋‹ค.

 

 

 

Rebase ์‚ฌ์šฉ ์‹œ ์ฃผ์˜์‚ฌํ•ญ

  • ์ด๋ฏธ ๊ณต๊ฐœ ์ €์žฅ์†Œ์— pushํ•œ ์ปค๋ฐ‹์€ rebaseํ•˜์ง€ ๋ง๊ธฐ

๋ฐœ์ƒ ๊ฐ€๋Šฅํ•œ ๋ฌธ์ œ

  • ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ธฐ์กด ์ปค๋ฐ‹์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์—…ํ–ˆ์„ ๊ฒฝ์šฐ
  • ์ด๋ฏธ push๋œ ์ปค๋ฐ‹์„ rebaseํ•˜๋ฉด ํŒ€ ๋™๋ฃŒ๋“ค์˜ ์ž‘์—…์— ํ˜ผ๋ž€ ์ดˆ๋ž˜
  • ์ถฉ๋Œ๊ณผ ์ค‘๋ณต๋œ ์ปค๋ฐ‹ ๋ฐœ์ƒ ๊ฐ€๋Šฅ

๋ฌธ์ œ ์›์ธ : rebase๋Š” ๊ธฐ์กด์˜ ์ปค๋ฐ‹์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋‚ด์šฉ๋งŒ ๊ฐ™์€ ์ƒˆ๋กœ์šด ์ปค๋ฐ‹์„ ๋งŒ๋“ค๊ธฐ ๋•Œ๋ฌธ

 

์ ์ ˆํ•œ Rebase ์‚ฌ์šฉ ์ƒํ™ฉ

  • ๋กœ์ปฌ์—์„œ๋งŒ ์ž‘์—…ํ•œ, ์•„์ง ๊ณต์œ ๋˜์ง€ ์•Š์€ ๋ธŒ๋žœ์น˜์—์„œ ์‚ฌ์šฉ
  • main ๋ธŒ๋žœ์น˜์˜ ์ตœ์‹  ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ feature ๋ธŒ๋žœ์น˜์— ์ ์šฉํ•˜๋Š” ๊ฒฝ์šฐ

 

Merge vs Rebase ์–ด๋–ค ๊ฒƒ์„ ์‚ฌ์šฉํ•ด์•ผ ๋ ๊นŒ?

Merge๋ฅผ ์„ ํ˜ธํ•˜๋Š” ๊ด€์ 

  • ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ๋Š” "์‹ค์ œ๋กœ ์ผ์–ด๋‚œ ์ผ์˜ ๊ธฐ๋ก"์ด๋‹ค.
  • ํžˆ์Šคํ† ๋ฆฌ๋Š” ์—ญ์‚ฌ์  ๋ฌธ์„œ๋กœ์„œ ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค.
  • ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์€ "๊ฑฐ์ง“๋ง"ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.
  • ๋ณต์žกํ•œ merge ์ปค๋ฐ‹๋“ค์ด ์žˆ๋”๋ผ๋„, ๊ทธ๊ฒƒ์ด ์‹ค์ œ ์ž‘์—… ๊ณผ์ •์ด๋ฏ€๋กœ ๋ณด์กดํ•ด์•ผ ํ•œ๋‹ค.

Rebase๋ฅผ ์„ ํ˜ธํ•˜๋Š” ๊ด€์ 

  • ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ๋Š” "ํ”„๋กœ์ ํŠธ๊ฐ€ ๋งŒ๋“ค์–ด์ง„ ๊ณผ์ •์˜ ์ด์•ผ๊ธฐ"์ด๋‹ค
  • ์ฑ…์˜ ์ดˆ๊ณ ๋ฅผ ๊ณต๊ฐœํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ฒ˜๋Ÿผ, ์ง€์ €๋ถ„ํ•œ ์ž‘์—… ๊ณผ์ •์„ ๋ณด์—ฌ์ค„ ํ•„์š”๊ฐ€ ์—†๋‹ค.
  • A์—์„œ B๋กœ ๊ฐ€๋Š” ๊ณผ์ •์„ ๋” ๋ช…ํ™•ํ•˜๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.
  • ๋ฏธ๋ž˜์˜ ๋…์ž๋ฅผ ์œ„ํ•ด ๋” ๋‚˜์€ ๋ฐฉ์‹์œผ๋กœ ์Šคํ† ๋ฆฌ๋ฅผ ์ „๋‹ฌํ•˜์ž.

์ ์ ˆํ•œ ์‚ฌ์šฉ

  • ๋กœ์ปฌ ๋ณ€๊ฒฝ์‚ฌํ•ญ์€ rebase๋กœ ์ •๋ฆฌ
  • ์ด๋ฏธ pushํ•œ ๋‚ด์šฉ์€ ์ ˆ๋Œ€ rebaseํ•˜์ง€ ์•Š๊ธฐ

 

์ฐธ๊ณ  ์ž๋ฃŒ :

https://git-scm.com/book/en/v2/Git-Branching-Rebasing

 

Git - Rebasing

Ahh, but the bliss of rebasing isn’t without its drawbacks, which can be summed up in a single line: If you follow that guideline, you’ll be fine. If you don’t, people will hate you, and you’ll be scorned by friends and family. When you rebase stuf

git-scm.com

https://wikidocs.net/153961

 

05-05 rebase

> *SimpleTest 2.1.0๋ฒ„์ „ ๋ฐฐํฌ ํ›„์— ๋‘๊ฐ€์ง€ ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€๋‹ค.* > > - *CalcDiv ํ•จ์ˆ˜ ๊ฒฐํ•จ : ๋ถ„๋ชจ๋ฅผ 0์œผ๋กœ ํ–ˆ์„ ๋•Œ ์—๋Ÿฌ๋ฐœ์ƒ, ๋‚˜๋ˆ—์…ˆ ๊ฒฐ๊ณผ๊ฐ€ ์ •…

wikidocs.net

 

728x90