Post

[git] git pull --rebase vs --no-rebase ์ฐจ์ด

[git] git pull --rebase vs --no-rebase ์ฐจ์ด

๐Ÿ”ต git์˜ ์žฅ์ ์„ ๋А๋ผ๋Š” ์š”์ฆ˜

์š”์ฆ˜ ์—ฌ๋Ÿฌ๋Œ€์˜ PC์—์„œ git์„ ํ™œ์šฉํ•˜๊ณ  ์†์‰ฝ๊ฒŒ ๋ฒ„์ „ ๊ด€๋ฆฌ๋ฅผ ํ•˜๊ณ  ์žˆ๋‹ค.

์•„์ง ํ˜ผ์ž ์ž‘์—…ํ•˜๋Š” ์ˆ˜์ค€์ด๋ผ git์„ ํ™œ์šฉํ•œ๋‹ค๊ณ  ํ•ด๋ด์•ผ Github์— ์ €์žฅ๋œ ๋‚ด ์ž‘์—…๋ฌผ์„ pullํ•˜๊ณ  ์ž‘์—…์ด ๋๋‚˜๋ฉด pushํ•˜๋Š” ์ •๋„๋กœ ํ™œ์šฉ ์ค‘์ด๋‹ค.

์ด๋ ‡๊ฒŒ ์ž‘์—…ํ•˜๋ฉด ์•ˆ์ „ํ•˜๊ฒŒ ๋‚ด ์ฝ”๋“œ๊ฐ€ ๊ด€๋ฆฌ๊ฐ€ ๋˜๋Š” ์ƒํ™ฉ์ด๋ฉด์„œ ๋‚ด ๊ณต๋ถ€ ๊ธฐ๋ก์ด ํ•œ ์ค„ ํ•œ ์ค„ ๋‚จ๋Š” ๋А๋‚Œ์ด๋ผ ๋ฌ˜ํ•˜๊ฒŒ ๋ฟŒ๋“ฏํ•˜๊ธฐ๊นŒ์ง€ ํ•˜๋‹ค.

์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ ๊ฐ€์žฅ ๊ฑฑ์ •๋˜๋Š” ๊ฒƒ์€ ์—ญ์‹œ ์—ฌ๋Ÿฌ๋Œ€์—์„œ ์ž‘์—…ํ•œ ์ฝ”๋“œ์˜ version์ด ์ถฉ๋Œํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋ž˜์„œ ์ด ๊ฒฝํ—˜์„ ํฌ์ŠคํŒ…ํ•˜๋ ค๊ณ  ํ•œ๋‹ค.


โšช git push๋ฅผ ํ–ˆ๋Š”๋ฐ conflict๊ฐ€ ์ƒ๊ธฐ๋ฉด?

1) ๋จผ์ € git status ๋กœ ์ถฉ๋Œ์ด ์ผ์–ด๋‚œ ํŒŒ์ผ ํ™•์ธ

2) master ๋ธŒ๋žœ์น˜์˜ ์ฝ”๋“œ๋ฅผ mgergeํ•˜๊ณ  ์˜ฌ๋ฐ”๋ฅธ ์ „๋žต์˜ ๋ฒ„์ „์œผ๋กœ ์ˆ˜์ •ํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”.


โšช git pull์€ ์‚ฌ์‹ค ๋‘ ๊ฐ€์ง€ git ๋ช…๋ น์–ด๋ฅผ ํ•ฉ์ณ๋†“์Œ

  • git fetch: ์›๊ฒฉ ๋ ˆํฌ์˜ ์ตœ์‹  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฐ€์ ธ์˜ค์ง€๋งŒ, ๋‚ด ๋กœ์ปฌ ๊ณต๊ฐ„์—๋Š” ๋ฐ”๋กœ ์ ์šฉ x. ๋ณ€๊ฒฝ์‚ฌํ•ญ์— ๋Œ€ํ•œ ํ™•์ธ๋งŒ ํ•จ
  • git merge: fetch๋กœ ๊ฐ€์ ธ์˜จ ์ตœ์‹  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋กœ์ปฌ ๋ธŒ๋žœ์น˜์— ํ•ฉ์น˜๋Š” ๋‹จ๊ณ„
1)git pull ๋˜๋Š” git pull --no-rebase
1
2
 - `git pull`์€ ๊ธฐ๋ณธ์ ์œผ๋กœ merge ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™
 - `--no-rebase`: ๋ณ‘ํ•ฉ(Merge), ๋ชจ๋“  ์ปค๋ฐ‹ ๋ณด์กด, merge commit ์ƒ์„ฑ๋จ
2) git pull --rebase
  • --rebase: ๋ฆฌ๋ฒ ์ด์Šค(Rebase), ๋‚ด ์ปค๋ฐ‹์„ ๋ฆฌ๋ชจํŠธ ์ปค๋ฐ‹ ์œ„๋กœ ์žฌ๋ฐฐ์น˜

โšช ๋น„๊ต

์˜ต์…˜์„ค๋ช…์ปค๋ฐ‹ ๊ตฌ์กฐ
โ€“no-rebase์•ˆ์ „, ํ˜‘์—…์— ์ ํ•ฉ๋ถ„๊ธฐ + ๋ณ‘ํ•ฉ (Y์žํ˜•)
โ€“rebase๊น”๋”ํ•œ ํžˆ์Šคํ† ๋ฆฌ์ง์„ ํ˜• (ํ•ด์‹œ ๋ณ€๊ฒฝ)
  • ํ˜‘์—… ์ค‘์ด๋ผ๋ฉด โ†’ --no-rebase
  • ํ˜ผ์ž ์ž‘์—…ํ•œ ๋ธŒ๋žœ์น˜ ์ •๋ฆฌ โ†’ --rebase

โšช ์‹ค์ „ ์˜ˆ์ œ

GitHub์— ์ด๋ฏธ main ๋ธŒ๋žœ์น˜์— ์ปค๋ฐ‹ 1๊ฐœ ์žˆ์Œ:

1
A  โ† ์„œ๋ฒ„ (origin/main)

๋‚ด ๋กœ์ปฌ์—์„œ๋„ clone ํ›„, ํ˜ผ์ž ์ปค๋ฐ‹ 2๊ฐœ ๋งŒ๋“ฆ:

1
A - B - C  โ† ๋กœ์ปฌ (main)

๊ทธ๋Ÿฐ๋ฐ ๋ˆ„๊ตฐ๊ฐ€ GitHub์— D ์ปค๋ฐ‹์„ pushํ•ด๋ฒ„๋ฆผโ—
๊ทธ๋Ÿผ ์ด์ œ ์„œ๋ฒ„๋Š”:

1
A - D  โ† ์„œ๋ฒ„ (origin/main)

์ด ์ƒํ™ฉ์—์„œ ๋‚˜๋Š” git pull ํ•ด์•ผ ํ•˜๋Š”๋ฐโ€ฆ

โœ… 1. git pull โ€“no-rebase ํ–ˆ์„ ๊ฒฝ์šฐ (merge)

1
2
3
4
5
A - D
     \
      B - C
           \
            M   โ† ๋กœ์ปฌ main (merge commit)

โœ… 2. git pull โ€“rebase ํ–ˆ์„ ๊ฒฝ์šฐ (rebase)

1
A - D - B' - C'  โ† ๋กœ์ปฌ main (rebase ํ›„)

๋‚ด ์ปค๋ฐ‹ B, C๊ฐ€ D ๋’ค์— ์žฌ์ •๋ ฌ๋จ (Bโ€™, Cโ€™๋Š” ํ•ด์‹œ๊ฐ€ ๋ฐ”๋€ ์ƒˆ๋กœ์šด ์ปค๋ฐ‹)

ํžˆ์Šคํ† ๋ฆฌ๋Š” ์ง์„ ํ˜•์œผ๋กœ ๊น”๋”

๋‹จ, ์›๋ž˜ B, C๋Š” ์‚ฌ๋ผ์ง€๊ณ  ์ƒˆ๋กœ์šด ์ปค๋ฐ‹์ด ์ƒ๊ธด ๊ฒƒ์ฒ˜๋Ÿผ ๋จ


๐Ÿ”ต ์ •๋ฆฌํ•˜๋ฉด

merge ๋ฐฉ์‹

โ†’ ๋‘ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๊ทธ๋Œ€๋กœ ํ•ฉ์ณ์„œ merge commit ํ•˜๋‚˜ ์ถ”๊ฐ€

rebase ๋ฐฉ์‹

โ†’ ๋‚ด ์ž‘์—…์„ ์ƒ๋Œ€ ์ž‘์—… ์ดํ›„์— ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์žฌ๋ฐฐ์—ด

์ƒํ™ฉ์ถ”์ฒœ ์˜ต์…˜
ํ˜‘์—… ์ค‘, ์•ˆ์ •์„ฑ ์ค‘์š”--no-rebase
๊ฐœ์ธ ํ”„๋กœ์ ํŠธ, ์ปค๋ฐ‹ ๊น”๋”ํ•˜๊ฒŒ--rebase
This post is licensed under CC BY 4.0 by the author.

ยฉ 2025 Soohyun Jeon โญ

๐ŸŒฑ Mostly to remember, sometimes to understand.