๐Ÿšฆ Git ์ „๋žต, ์–ด๋А ์ชฝ์œผ๋กœ?

์ž„๊ทœ์„ฑยท2025๋…„ 7์›” 10์ผ
1
post-thumbnail

1. Rebase vs Merge ๋ถ„์„

rebase์™€ merge ์˜ ์ฐจ์ด์ ์„ ์„ค๋ช…ํ•˜๊ธฐ ์ „์— ๊ณตํ†ต์ ์„ ๋จผ์ € ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ฐจ์ด์ ์„ ์„ค๋ช…ํ•˜๊ธฐ ์ด์ „์— ๊ณตํ†ต์ ์„ ์„ค๋ช…ํ•˜๊ฒŒ ๋˜๋ฉด ์–ด๋–ค ๋ถ€๋ถ„์—์„œ ๊ทน๋ช…ํ•œ ์ฐจ์ด๊ฐ€ ๋‚˜๋Š”์ง€ ๋” ํ™•์‹คํ•˜๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

1-1. Rebase์™€ Merge์˜ ๊ณตํ†ต์ 

Rebase์™€ Merge๋ชจ๋‘ ๊ฐˆ๋ผ์ง„ ์ƒํ™ฉ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์ž…๋‹ˆ๋‹ค.
์ข€ ๋” ์ž์„ธํžˆ ๋งํ•˜๋ฉด ๋ธŒ๋žœ์น˜๊ฐ€ ๋‘ ๊ฐœ ์ด์ƒ ์žˆ๊ณ  ์ด ๋ธŒ๋žœ์น˜๋“ค์„ ์•Œ๋งž๊ฒŒ ํ•ฉ์น  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค.
์ฆ‰ ํ•ฉ์น  ๋•Œ ์–ด๋–ค ์ธก๋ฉด๋“ค์„ ๊ณ ๋ คํ•˜๋Š”๊ฒŒ ์ค‘์š”ํ•œ์ง€์— ๋”ฐ๋ผ์„œ Rebase์™€ Merge ๋‘˜ ์ค‘์˜ ์„ ํƒ์ด ๋” ์‰ฌ์›Œ์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

1-2. ๋ธŒ๋žœ์น˜๋ฅผ ํ•ฉ์น  ๋•Œ ์ค‘์š”ํ•œ ์ ๋“ค

1) ์ถฉ๋Œ์ด ์ž˜ ์•ˆ๋‚˜๋Š”๊ฐ€?
ํ•ฉ์น˜๋Š” ๊ณผ์ •์—์„œ ์ถฉ๋Œ์€ ๋ถˆ๊ฐ€ํ”ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ํ•ฉ์น˜๋Š” ๊ณผ์ •์—์„œ ์ถฉ๋Œ์— ๋Œ€ํ•œ ๋‹ค์–‘ํ•œ ์ „๋žต๋“ค์ด ์กด์žฌํ•˜๋ฉฐ ์ด๋Ÿฌํ•œ ์ „๋žต์ด ์ถฉ๋Œ ๊ด€๋ฆฌ์˜ ์ค‘์š”์„ฑ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
2) ์†์‹ค๋˜๋Š” ์ฝ”๋“œ๊ฐ€ ์—†์ด ํ•ฉ์ณ์กŒ๋Š”๊ฐ€?
์ถฉ๋Œ๊ด€๋ฆฌ ๋ฐ ํ•ฉ์น˜๋Š” ๊ณผ์ •์—์„œ ์†์‹ค๋˜๋Š” ์ฝ”๋“œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์—„์ฒญํฐ ๋ฆฌ์Šคํฌ๋กœ ๋ฒˆ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์ฝ”๋“œ๋ฆฌ๋ทฐ, CI์ „๋žต๋“ฑ์„ ํ†ตํ•ด๋„ ๋ณด์™„ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋จผ์ € ํ•ฉ์น˜๋Š” ์ƒํ™ฉ์—์„œ๋Š” ์ฝ”๋“œ์˜ ์†์‹ค๋ณด๋‹ค ์œ„ํ—˜ํ•œ ๊ฒƒ์€ ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
3) ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ๊ฐ€ ๋” ๋ถ„๋ช…ํ•œ๊ฐ€?
์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ๋Š” ์—ฌ๋Ÿฌ ์ธก๋ฉด์—์„œ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ํฌํ† ํด๋ฆฌ์˜ค๊ฐ€ ๋  ์ˆ˜ ์žˆ๊ณ , ์—๋Ÿฌ๊ฐ€ ๋‚ฌ์„ ๋•Œ ์–ด๋А์‹œ์  ์ •ํ™•ํžˆ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ํŒ๋‹จํ•  ๋•Œ์—๋„ ๋„ˆ๋ฌด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

์ค‘์š”ํ•œ ์ ๋“ค์€ ํฌ๊ฒŒ 3๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด๊ฒƒ๋งŒ์œผ๋กœ rebase์™€ merge์˜ ํŒ๋‹จ์— ๋Œ€ํ•ด์„œ๋Š” ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๋‘๊ฐ€์ง€์˜ ์ •ํ™•ํ•œ ๋™์ž‘์„ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋‘๊ฐ€์ง€์˜ ๋™์ž‘์— ๋Œ€ํ•œ ๋น„๊ต๋ฅผ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


1-3. Merge์˜ ๋™์ž‘๊ณผ์ •

merge๋Š” ๋‹จ์ˆœํ•ฉ๋‹ˆ๋‹ค. main์œผ๋กœ ๋ถ€ํ„ฐ ๋ถ„๊ธฐ๋œ K-branch์˜ ๋ชจ๋“  ๋ณ€๊ฒฝ๊ณผ์ •์„ main-branch์— ํ•ฉ์น˜๋ฉฐ 1๊ฐœ์˜ ์ƒˆ๋กœ์šด ์ปค๋ฐ‹์„ ๋งŒ๋“ค์–ด๋ƒ…๋‹ˆ๋‹ค.
๊ทธ๋ฆผ์œผ๋กœ ๋ณด๋ฉด ๋” ์ดํ•ดํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.(๊ฐ ์•ŒํŒŒ๋ฒณ์€ ์„œ๋กœ๋‹ค๋ฅธ ์ปค๋ฐ‹์ž…๋‹ˆ๋‹ค)

before merge

	  A---B---C (K-branch)
	 /
    D---E---F---G (main-branch)

after merge

      A---B---C (K-branch)
	 /         \
    D---E---F---G---H (main-branch)

k๋ผ๋Š” ์‚ฌ๋žŒ์ด k-branch๋ฅผ ํŒ ์ดํ›„ A-B-C์˜ ์ปค๋ฐ‹์„ ๋งŒ๋“ค์—ˆ๊ณ  ํ•ด๋‹น branch์˜ ๊ธฐ๋Šฅ์„ ์™„๋ฃŒํ•ด์„œ main-branch์— merge์ดํ›„ H๋ผ๋Š” branch๋กœ ๋‹ค์‹œ ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค.

1-4 rebase์˜ ๋™์ž‘๊ณผ์ •

rebase๋Š” ๋‘๊ฐœ์˜ branch๋ฅผ ํ•ฉ์นœ๋‹ค๋Š” ์ ์—์„œ๋Š” ๋น„์Šทํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํ•ต์‹ฌ ๋™์ž‘์€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.
๋ง ๊ทธ๋ž˜๋„ ์—ฌ๋Ÿฌ branch์˜ ์ˆœ์„œ๊ด€๊ณ„๋ฅผ ์žฌ๋ฐฐ์น˜ํ•˜๋Š”๋ฐ ์ดˆ์ ์ด ๋งž์ถฐ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
๋‹จ์ˆœํ•ฉ์น˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๋ฐฐ์น˜๋ฅผ ํ•˜๋Š” ๊ฒƒ์ด๊ธฐ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹œ๋‚˜๋ฆฌ์˜ค-1-Before

          A---B---C topic
         /
    D---E---F---G master

์‹œ๋‚˜๋ฆฌ์˜ค-1-After

                  A'--B'--C' topic
                 /
    D---E---F---G master

์‹œ๋‚˜๋ฆฌ์˜ค-1-After(์‹ค์ œ)

D---E---F---G---A'---B'---C' topic

--> ์‹ค์ œ๋กœ๋Š” ํ•˜๋‚˜์˜ ์„ ์ด ๋ฉ๋‹ˆ๋‹ค.


์‹œ๋‚˜๋ฆฌ์˜ค-2-Before

                            H---I---J topicB
                           /
                  E---F---G  topicA
                 /
    A---B---C---D  master

๋ช…๋ น์–ด

git rebase --onto master topicA topicB

์‹œ๋‚˜๋ฆฌ์˜ค-2-After

                  H'--I'--J'  topicB
                /
                | E---F---G  topicA
                |/
    A---B---C---D  master

๋ง๊ทธ๋Œ€๋กœ ๋ธŒ๋žœ์น˜๋ผ๋ฆฌ์˜ ์žฌ๋ฐฐ์น˜๊ฐ€ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.
์œ„ 2๊ฐœ์˜ ์‹œ๋‚˜๋ฆฌ์˜ค ๋ง๊ณ ๋„ ๋” ๋งŽ์€ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰ rebase๋Š” ๋ธŒ๋žœ์น˜๋ผ๋ฆฌ์˜ ๋ฐฐ์น˜๋งŒ์„ ํ•˜๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ ๋™์ž‘์ž…๋‹ˆ๋‹ค.
์ด์ œ ๋™์ž‘์›๋ฆฌ์™€ ํ•ฉ์น  ๋•Œ์˜ ์ค‘์š”ํ•œ ์ ์„ ์•Œ์•˜์œผ๋‹ˆ ์žฅ๋‹จ์ ์„ ๋น„๊ตํ•ด๋ด…์‹œ๋‹ค.


1-5. Merge์˜ ์žฅ๋‹จ์ 

์žฅ์ 
๋Ÿฌ๋‹์ปค๋ธŒ๊ฐ€ ๋‚ฎ๋‹ค : ์œ„์—์„œ๋„ ๋ณด์•˜๋“ฏ์ด ์‹œ๋‚˜๋ฆฌ์˜ค๋„ 1๊ฐœ์ด๋ฉฐ ๊ฒฐ๊ตญ ํ•ฉ์น˜๊ธฐ๋งŒ ํ•˜๋Š” ๋™์ž‘์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ช…๋ น์–ด๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ๋„ ๋‹จ์ˆœํ•˜๋ฉฐ ์ƒ๋Œ€์ ์œผ๋กœ ์ง๊ด€์ ์œผ๋กœ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

์ถฉ๋Œ๊ด€๋ฆฌ๊ฐ€ ์‰ฝ๊ณ  ์ฝ”๋“œ ์†์‹ค ์œ„ํ—˜์ด ๋‚ฎ์Œ : merge ์‹œ๋‚˜๋ฆฌ์˜ค-1์„ ๋ณด๊ฒŒ๋˜๋ฉด master์˜ ์ตœ์‹  ์ปค๋ฐ‹์ธ G์™€ topic-branch ๋‘๊ฐ€์ง€๋งŒ์˜ ์ฝ”๋“œ๋น„๊ต๋งŒ์œผ๋กœ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ฒŒ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰ master์— ์–ด๋–ค ๋ถ€๋ถ„์ด ์‚ฌ๋ผ์ง€๊ณ  ์–ด๋–ค๋ถ€๋ถ„์ด ์ถ”๊ฐ€๋˜์—ˆ๋Š”์ง€ ์ƒ๋Œ€์ ์œผ๋กœ ๋ช…ํ™•ํ•ฉ๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ ์ถฉ๋Œ๊ด€๋ฆฌ์™€ ์ฝ”๋“œ์†์‹ค ์œ„ํ—˜์— ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๋‹จ์ 
์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ๊ฐ€ ์ถ”์  ์–ด๋ ค์›€ : merge๋ฅผ ํ•˜๋ฉด ํ•˜๋‚˜์˜ ์ƒˆ๋กœ์šด ์ปค๋ฐ‹์œผ๋กœ Main-branch์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด์ „์— ์ •ํ™•ํžˆ ์–ด๋–ค ์ž‘์—…์„ ํ–ˆ๋Š”์ง€์— ๋Œ€ํ•œ ์ถ”์ ์ด ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋˜ํ•œ ํžˆ์Šคํ† ๋ฆฌ ์ถ”์ ์ด ์ƒ์„ธํ•˜๊ฒŒ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.(merge์ด์ „ branch์••์ถ•) ๋”ฐ๋ผ์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ •ํ™•ํžˆ ์–ด๋–ค ์ปค๋ฐ‹์—์„œ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ํŒ๋‹จํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง‘๋‹ˆ๋‹ค.

1-6. Rebase์˜ ์žฅ๋‹จ์ 

์žฅ์ 
์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ ๊น”๋” : ์„ ํ˜•์ ์œผ๋กœ ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ๊ฐ€ ๊ด€๋ฆฌ๋˜๊ธฐ๋•Œ๋ฌธ์— ์—๋Ÿฌ๋ฐœ์ƒ์‹œ ์ถ”์ ์ด ์‰ฌ์›Œ์ง€๋ฉฐ, ๋‹จ๊ณ„๋ณ„ ์ฝ”๋“œ ์ฒดํ‚น์ด ์‰ฌ์›Œ์ง„๋‹ค.

๋‹จ์ 
๋Ÿฌ๋‹์ปค๋ธŒ๊ฐ€ ๋†’๋‹ค : ์œ„์—์„œ ๋ดค๋“ฏ์ด ์‹œ๋‚˜๋ฆฌ์˜ค๋งŒ ์—ฌ๋Ÿฌ๊ฐœ๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ค์ƒํ™ฉ์—์„œ ์–ด๋–ป๊ฒŒ ์จ์•ผํ• ์ง€์— ๋Œ€ํ•œ ํ•™์Šต์ด ํ•„์š”ํ•ด์ง„๋‹ค. ์ฆ‰ ๋‹จ์ˆœํžˆ ํ•ฉ์น˜๋Š” merge๋ณด๋‹ค๋Š” ๋” ๊ณต๋ถ€ํ•ด์•ผํ•œ๋‹ค.
์ถฉ๋Œ ์œ„ํ—˜์ด ๋†’๋‹ค : Merge๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ปค๋ฐ‹์„ ์••์ถ•ํ•ด์„œ ํ•ฉ์นœ๋‹ค๋ฉด Rebase๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ปค๋ฐ‹์„ ํ•˜๋‚˜ํ•˜๋‚˜ ๋‹ค์‹œ ์Œ“๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ๊ฐ์—์„œ์˜ ์ถฉ๋Œ์ด ๋ชจ๋‘ ๋ฐœ์ƒํ•˜๋ฉด ์ถฉ๋Œ๊ด€๋ฆฌ๊ฐ€ ๋งค์šฐ ๋ณต์žกํ•ด์ง„๋‹ค.


2. ํ˜‘์—… ์‹œ Rebase์™€ Merge ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ• ๊นŒ?

๋จผ์ € ๋ธŒ๋žœ์น˜๋ฅผ ํ•ฉ์น˜๋Š” ๊ฒƒ์€ ํ•„์ˆ˜์ด๊ธฐ์— Merge๋Š” ๋ฌด์กฐ๊ฑด ์‚ฌ์šฉํ•  ์ˆ˜ ๋ฐ–์— ์—†๋‹ค.
๊ทธ๋ฆฌ๊ณ  Rebase๋Š” ์˜ต์…”๋„์ด๋‹ค.

2-1. Merge๋งŒ ์‚ฌ์šฉํ•˜๊ธฐ ์ ํ•ฉํ•œ ๊ฒฝ์šฐ

โœ… ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ์— ๋Œ€ํ•œ ์š”๊ตฌ์‚ฌํ•ญ์ด ์—†๋Š”(X) ๊ฒฝ์šฐ
๊ฐœ์ธ ํ”„๋กœ์ ํŠธ ๋ฐ ํ† ์ดํ”„๋กœ์ ํŠธ ๊ฐ™์€ ํ”„๋กœ์ ํŠธ๋“ค์€ ๋Œ€๋ถ€๋ถ„ ํƒ€์ดํŠธํ•œ ์ปค๋ฐ‹ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ๋”ฐ๋ผ์„œ ์–ด๋ ค์šด Rebase๋ฅผ ์ ‘๋ชฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

โœ… Git/GitHub์ˆ™๋ จ๋„๊ฐ€ ๋‚ฎ์€ ๊ฒฝ์šฐ
Git ์ˆ™๋ จ๋„๊ฐ€ ๋‚ฎ์€ ๊ฒฝ์šฐ์—๋Š” ๊ธฐ๋ณธ Merge๋ฐBranch๊ด€๋ฆฌ๋งŒ์œผ๋กœ๋„ ๋ฒ…์ฐฐ ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ Rebase๋ฅผ ๋„์ž…ํ•˜๋Š” ๊ฒƒ์€ ํž˜๋“ค ๊ฒƒ์ด๋‹ค.

โœ… ์ƒ์‚ฐ์„ฑ์ด ์ค‘์š”ํ•œ ๊ฒฝ์šฐ
Rebase๊นŒ์ง€ ๊ณ ๋ คํ•˜๋ฉฐ ํ˜‘์—…์„ ํ•˜๋ฉด ์กฐ๊ธˆ ๋” ์†Œ์š”๊ฐ€ ์ƒ๊ธธ๊ฒƒ์ด๊ณ  ์ด๋Š” ์ƒ์‚ฐ์„ฑ์˜ ์ €ํ•˜(์กฐ๊ธˆ์ด๋ผ๋„..)๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

2-2. Rebase๋ฅผ ๋„์ž…ํ•˜๊ธฐ ์ ํ•ฉํ•œ ๊ฒฝ์šฐ

โœ… ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ์— ๋Œ€ํ•œ ์š”๊ตฌ์‚ฌํ•ญ์ด ์žˆ๋Š”(O) ๊ฒฝ์šฐ
๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋ฆฌ์Šคํฌ๊ฐ€ ํฌ๊ฑฐ๋‚˜, ์ผ์˜ ์ง„ํ–‰๋„์˜ ์ •ํ™•ํ•œ ํŒŒ์•…์„ ์œ„ํ•ด์„œ๋Š” ์ •ํ™•ํ•˜๋ฉฐ ์„ ํ˜•์ ์ธ ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ๊ฐ€ ํ•„์ˆ˜์ด๋‹ค.
โœ… Git/GitHub์ˆ™๋ จ๋„๊ฐ€ ๋†’์€ ๊ฒฝ์šฐ
Git์— ์ˆ™๋ จ๋„๊ฐ€ ๋†’๋‹ค๋ฉด ์ถฉ๋Œ๊ด€๋ฆฌ๋‚˜ ๋ธŒ๋žœ์น˜ ์ „๋žต์— ๋Œ€ํ•œ ๋ถ€๋ถ„์„ ์–ด๋ ต์ง€์•Š๊ฒŒ ํ•ด๊ฒฐํ•  ๊ฒƒ์ด๋ฉฐ, ์ด๋Ÿด๋•Œ๋Š”Rebase๋ฅผ ๋„์ž…ํ•ด๋„ ์ข‹๋‹ค.

2-3 Rebase + Merge ์‚ฌ์šฉ๋ฒ•

์ฒ˜์Œ์—๋„ ์†Œ๊ฐœํ–ˆ๋‹ค์‹œํ”ผ ํ•ฉ์น˜๋Š” ๊ณผ์ •์—์„œ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค.

1. main branch ๊ฒƒ์„ rebase pulll

git pull origin develop --rebase

1-1. ์ถฉ๋Œ์ด ๋ฐœ์ƒํ–ˆ๋‹ค๋ฉด ์ถฉ๋Œ ํ•ด๊ฒฐ

1-2. ์ถฉ๋Œ์ดํ›„ rebase๊ณ„์†

git rebase --continue

2. origin/branch๋กœ push
main๋ธŒ๋žœ์น˜์™€ ๋ฌด์‚ฌํžˆ rebase ์™„๋ฃŒ ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ‘ธ์‰ฌ

git push origin branch

3. GitHub์—์„œ origin/main๋กœ rebase merge
์œ„์˜ ๊ณผ์ •์—์„œ ๋ฌธ์ œ์—…์ด rebase pull์ด ๋˜์—ˆ๋‹ค๋ฉด ์ž๋™์ ์œผ๋กœ rebase-merge๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค.

3. Rebase, Merge์ •๋ฆฌ

์ด๋ ‡๊ฒŒ rebase์™€ merge์— ๋Œ€ํ•ด์„œ ๋ถ„์„ํ•˜๊ณ  ์žฅ๋‹จ์ , ์ ํ•ฉํ™˜๊ฒฝ, ์‚ฌ์šฉ๋ฒ•์„ ์•Œ์•„๋ดค์Šต๋‹ˆ๋‹ค.
์ •๋ฆฌํ•˜์ž๋ฉด ๋‘ ๊ฐœ๋…์€ ํ•ฉ์น˜๋Š”๋ฐ ์‚ฌ์šฉํ•˜๋Š” Git ๋ช…๋ น์–ด๋“ค์ด๋ฉฐ, ์š”๊ตฌ์‚ฌํ•ญ์— ๋งž๊ฒŒ ์ปค๋ฐ‹์Šคํ† ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š”๋ฐ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์–ด ์˜€์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ fetch pull์„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


4. pull vs fetch

4-1 pull์ด๋ž€?

pull์€ ์–ด๋ ต์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ๋กœ์ปฌ(local)์— ์ž‘์—…ํ•˜๋Š” ๋‚˜์˜ ๋ธŒ๋žœ์น˜๊ฐ€ ์›๊ฒฉ(origin)๋ณด๋‹ค ๋’ค์ณ์งˆ ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์–ด ์ž…๋‹ˆ๋‹ค.
์ฆ‰ ๋’ค์ณ์ ธ์žˆ๋Š” ๋งŒํผ์˜ ์ปค๋ฐ‹์„ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆผ์œผ๋กœ ํ™•์ธํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

before pull

          A---B---C master on origin
	     /
    D---E---F---G master on local

after pull

	      A---B---C origin/master
	     /         \
    D---E---F---G---H master

1) ๊ธฐ์กด์˜ ๋กœ์ปฌ์€ ์›๊ฒฉ์—๋น„ํ•ด A B C ๋งŒํผ์˜ ์ปค๋ฐ‹์ด ๋’ค์ณ์ ธ์žˆ์Šต๋‹ˆ๋‹ค.
2) ์ดํ›„ pull๋ช…๋ น์–ด๋กœ A B C๋ฅผ ๊ฐ€์ ธ ์™”์ง€๋งŒ F G ๋งŒํผ์— ๋ณ€๊ฒฝ์‚ฌํ•ญ๊ณผ์˜ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
3) ์ถฉ๋Œ์„ ํ•ด๊ฒฐํ•œ ์ดํ›„ H๋ผ๋Š” ์ƒˆ๋กœ์šด ๋ฒ„์ „์ด ์ƒ๊ธฐ๋ฉฐ ๋’ค์ณ์ง์—†์ด ๋ชจ๋“  ์›๊ฒฉ์œ„ ์ปค๋ฐ‹์„ ๊ฐ€์ ธ์˜ค๋Š”๋ฐ ์„ฑ๊ณตํ•ฉ๋‹ˆ๋‹ค.


4-2 git fetch๋ž€?

git fetch๋Š” ๋ณ€ํ˜•๋œ pull์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์ดํ•ดํ•˜๊ธฐ ํŽธํ•ฉ๋‹ˆ๋‹ค.
fetch์˜ ์ฃผ๋ชฉ์ ์€ ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋ธŒ๋žœ์น˜(branch)๋‚˜ ํƒœ๊ทธ(tag)๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์ด ๋ชฉ์ ์ž…๋‹ˆ๋‹ค.
์ด ๋•Œ ๊ธฐ์กด์— ์žˆ๋˜ branch์— ์ƒˆ๋กœ์šด commit์ด ์žˆ๋‹ค๋ฉด ์ด๋„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

before fetch

          A---B---C master on origin
	     /
    D---E---F---G master on local

after fetch

          A---B---C---K---L  origin/master
         /
D---E---F---G  master

                   X---Y  origin/feature

1) ๊ธฐ์กด ๋กœ์ปฌ์— ์—†๋˜ originK L ์ปค๋ฐ‹๋“ค์ด ๋Œ•๊ฒจ์™€์ง‘๋‹ˆ๋‹ค.
2) ๊ธฐ์กด ๋กœ์ปฌ์— ์—†๋˜ feature-branch๊ฐ€ ๊ฐ€์ ธ์™€์ง‘๋‹ˆ๋‹ค.

git fetch๋Š” ์ด๋ ‡๊ฒŒ ์›๊ฒฉ์ €์žฅ์†Œ์™€ ๋‹ค๋ฅธ์ ์„ ๋ชจ๋‘ ๊ฐ€์ ธ์˜ค๋Š” ๋™๊ธฐํ™” ์—ญํ• ์„ ํ•œ๋‹ค๊ณ  ์ดํ•ดํ•˜๋ฉด ํŽธํ•ฉ๋‹ˆ๋‹ค.


5. ๋งˆ๋ฌด๋ฆฌ

์ง€๊ธˆ๊นŒ์ง€ git์˜ ํ•ต์‹ฌ ๋ช…๋ น์–ด๋“ค์„ ์•Œ์•„๋ดค์Šต๋‹ˆ๋‹ค. ๊ฐ๊ฐ์˜ ๋™์ž‘๊ณผ ์ดํ•ด์˜ ๋„์›€์ด ๋˜์—ˆ์Šค๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค๐Ÿ˜€

ref :
1) git-merge docs : https://git-scm.com/docs/git-merge
2) git-rebase docs : https://git-scm.com/docs/git-rebase
3) git-pull docs : https://git-scm.com/docs/git-pull
4) git-fetch docs : https://git-scm.com/docs/git-fetch

profile
์‚ถ์˜ ์งˆ์„ ๋†’์—ฌ์ฃผ๋Š” ๊ฐœ๋ฐœ์ž

0๊ฐœ์˜ ๋Œ“๊ธ€