Git, GitHub

git merge, merge ์ข…๋ฅ˜(Fast-forward Merge, 3-way Merge), merge conflict ๋ฐœ์ƒ ์ด์œ  ๋ฐ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

9taetae9 2025. 1. 10. 14:31
728x90

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

merge์— ๋Œ€ํ•œ ๋‘ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ๊ฐœ๋…

1. ํŠน์ • commit์ด ์•„๋‹Œ branch๋ฅผ ๋ณ‘ํ•ฉํ•˜๋Š” ๊ฒƒ

merge ๋ช…๋ น์–ด๋Š” ์ „์ฒด branch์˜ ์ž‘์—… ๋‚ด์šฉ์„ ๋ณ‘ํ•ฉํ•˜๋Š” ๊ฒƒ์ด์ง€, ๊ฐœ๋ณ„ commit์„ ์„ ํƒํ•ด์„œ mergeํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค.

branch๋Š” ์ผ๋ จ์˜ commit๋“ค์˜ ํฌ์ธํ„ฐ์ด๋ฉฐ, ๊ทธ ๋ธŒ๋žœ์น˜์˜ ์ตœ์‹  ์ƒํƒœ(tip)๋ฅผ ๋Œ€ํ‘œํ•œ๋‹ค.

 

2. ํ•ญ์ƒ ํ˜„์žฌ HEAD ๋ธŒ๋žœ์น˜๋กœ ๋ณ‘ํ•ฉ

merge ๋ช…๋ น์„ ์‹คํ–‰ํ•  ๋•Œ, ๋‹ค๋ฅธ branch์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ํ˜„์žฌ ์ฒดํฌ์•„์›ƒ(checkout)๋œ branch(HEAD๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” branch)๋กœ ๋ณ‘ํ•ฉ๋œ๋‹ค.

์ฆ‰, ํ•ญ์ƒ ํ˜„์žฌ branch ์ชฝ์œผ๋กœ ๋ณ‘ํ•ฉ ๋œ๋‹ค.

ex) feature ๋ธŒ๋žœ์น˜๋ฅผ master์— ๋ณ‘ํ•ฉ(merge)ํ•˜๋ ค๋ฉด, ๋จผ์ € master ๋ธŒ๋žœ์น˜๋กœ checkoutํ•œ ํ›„ merge ๋ช…๋ น์„ ์‹คํ–‰ํ•ด์•ผ ํ•œ๋‹ค.

 

merge์˜ ์ข…๋ฅ˜

 

Fast-forward Merge

  • ํ˜„์žฌ ๋ธŒ๋žœ์น˜๊ฐ€ ๋ณ‘ํ•ฉํ•  ๋ธŒ๋žœ์น˜์˜ ์ง์ ‘์ ์ธ ์กฐ์ƒ์ผ ๋•Œ ์‚ฌ์šฉ
  • ๋‹จ์ˆœํžˆ ๋ธŒ๋žœ์น˜ ํฌ์ธํ„ฐ๋ฅผ ์ตœ์‹  ์ปค๋ฐ‹์œผ๋กœ ์ด๋™์‹œํ‚ค๋Š” ๋ฐฉ์‹

Fast-forward Merge (๋ณ‘ํ•ฉ์ „)

 

Fast-forward Merge (๋ณ‘ํ•ฉ ํ›„)

3-way Merge

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

3-way Merge (๋ณ‘ํ•ฉ ์ „)
3-way Merge (๋ณ‘ํ•ฉ ํ›„)

3-way merge์˜ ๋™์ž‘ ๊ณผ์ •

1. ๋ณ‘ํ•ฉ ๊ธฐ์ค€์  ์‹๋ณ„

  • 'base': ๋‘ ๋ธŒ๋žœ์น˜์˜ ๊ณตํ†ต ์กฐ์ƒ ์ปค๋ฐ‹
  • ๋ธŒ๋žœ์น˜ A์˜ ์ตœ์‹  ์ปค๋ฐ‹
  • ๋ธŒ๋žœ์น˜ B์˜ ์ตœ์‹  ์ปค๋ฐ‹

2. ๋ณ€๊ฒฝ์‚ฌํ•ญ ๋ถ„์„ ๋ฐ ์ž๋™ ๋ณ‘ํ•ฉ

  • Git์€ base๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ฐ ๋ธŒ๋žœ์น˜์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ถ„์„
  • ํŒŒ์ผ๋ณ„๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒํ™ฉ์„ ์ฒ˜๋ฆฌ
    • ํ•œ ๋ธŒ๋žœ์น˜์—์„œ๋งŒ ๋ณ€๊ฒฝ๋œ ํŒŒ์ผ: ์ž๋™์œผ๋กœ ํ•ด๋‹น ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ ์šฉ
    • ์–‘์ชฝ ๋ธŒ๋žœ์น˜์—์„œ ๋‹ค๋ฅธ ๋ถ€๋ถ„์„ ๋ณ€๊ฒฝ: ๋‘ ๋ณ€๊ฒฝ์‚ฌํ•ญ ๋ชจ๋‘ ์ ์šฉ
    • ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ํŒŒ์ผ: base์˜ ๋‚ด์šฉ ์œ ์ง€

merge conflict(๋ณ‘ํ•ฉ ์ถฉ๋Œ) ๋ฐœ์ƒ ๋ฐ ํ•ด๊ฒฐ 

์ถฉ๋Œ ๋ฐœ์ƒ ์ƒํ™ฉ

  • ๋‘ ๋ธŒ๋žœ์น˜์—์„œ ๊ฐ™์€ ํŒŒ์ผ์˜ ๋™์ผํ•œ ๋ถ€๋ถ„์„ ๊ฐ๊ฐ ๋‹ค๋ฅด๊ฒŒ ์ˆ˜์ •ํ•œ ๊ฒฝ์šฐ
  • Git์ด ์ž๋™์œผ๋กœ ์–ด๋А ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์„ ํƒํ•ด์•ผ ํ• ์ง€ ํŒ๋‹จํ•  ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ

merge conflict (๋ณ‘ํ•ฉ ์ถฉ๋Œ) ๋ฐœ์ƒ

์ถฉ๋Œ ํ•ด๊ฒฐ ๊ณผ์ •

  1. git status๋กœ ์ถฉ๋Œ ํŒŒ์ผ ํ™•์ธ
  2. ์ถฉ๋Œ ํŒŒ์ผ์„ ์—ด์–ด์„œ ์ถฉ๋Œ ๋ถ€๋ถ„ ํ™•์ธ (์•„๋ž˜ marker ํฌ๋งท ์ฐธ๊ณ )
  3. ์ถฉ๋Œ ๋ถ€๋ถ„์„ ์›ํ•˜๋Š” ๋‚ด์šฉ์œผ๋กœ ์ง์ ‘ ์ˆ˜์ •
  4. ์ถฉ๋Œ ๋งˆ์ปค ์‚ญ์ œ
  5. git add๋กœ ํ•ด๊ฒฐ๋œ ํŒŒ์ผ staging
  6. git commit์œผ๋กœ merge ์™„๋ฃŒ

 Git์ด ์•„๋ž˜์™€ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ์ถฉ๋Œ ๊ฐ์ง€ํ•œ ํŒŒ์ผ์— <<<<<<<, =======, >>>>>>> Conflict Marker๋ฅผ ์‚ฝ์ž…ํ•œ๋‹ค.

<<<<<<< HEAD
[ํ˜„์žฌ ๋ธŒ๋žœ์น˜์˜ ๋ณ€๊ฒฝ ๋‚ด์šฉ]
=======
[๋ณ‘ํ•ฉํ•˜๋ ค๋Š” ๋ธŒ๋žœ์น˜์˜ ๋ณ€๊ฒฝ ๋‚ด์šฉ]
>>>>>>> [๋ณ‘ํ•ฉํ•˜๋ ค๋Š” ๋ธŒ๋žœ์น˜ ๋ช…]

 

merge ์‚ฌ์šฉ ์‹œ ํŒ

  • checkout, switch ์ „์—๋Š” ํ˜„์žฌ ์ž‘์—… ๋‚ด์šฉ์„ commitํ•˜๊ฑฐ๋‚˜ ์Šคํƒœ์‹œ(stash)ํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅ
  • ๋ณ‘ํ•ฉ ์ถฉ๋Œ ๋ฐœ์ƒ ์‹œ ์ƒ์„ธํ•œ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€(์ถฉ๋Œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•, ์ด์œ )๋ฅผ ๊ธฐ๋กํ•˜์—ฌ ํ›„์— ํ•ด๋‹น merge ์ปค๋ฐ‹์„ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ํ•˜๊ธฐ
  • ๋” ์ด์ƒ ํ•„์š” ์—†๋Š” ๋ธŒ๋žœ์น˜๋Š” ์ฆ‰์‹œ ์‚ญ์ œํ•˜์—ฌ ๋ธŒ๋žœ์น˜๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ๊ด€๋ฆฌํ•˜๊ธฐ ( git branch -d [์‚ญ์ œํ•  ๋ธŒ๋žœ์น˜] )

 

 

 

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

https://git-scm.com/book/ko/v2/Git-%EB%B8%8C%EB%9E%9C%EC%B9%98-%EB%B8%8C%EB%9E%9C%EC%B9%98%EC%99%80-Merge-%EC%9D%98-%EA%B8%B0%EC%B4%88

 

Git - ๋ธŒ๋žœ์น˜์™€ Merge ์˜ ๊ธฐ์ดˆ

Merge ์‹œ์— ๋ฐœ์ƒํ•œ ์ถฉ๋Œ์„ ๋‹ค๋ฃจ๋Š” ๋” ์–ด๋ ต๊ณ  ์š”์ƒํ•œ ๋‚ด์šฉ์€ ๋’ค์— ๊ณ ๊ธ‰ Merge ์—์„œ ๋‹ค๋ฃจ๊ธฐ๋กœ ํ•œ๋‹ค.

git-scm.com

https://wikidocs.net/153693

 

05-03 merge์˜ ์ข…๋ฅ˜ : fast-forward, 3-way merge

๋ธŒ๋žœ์น˜๊ฐ„ merging์„ ํ•  ๋•Œ ์ƒˆ๋กœ์šด commit์ด ์ƒ๊ฒจ๋‚  ์ˆ˜๋„ ์žˆ๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค. ๋ณธ ์ ˆ์—์„œ๋Š” ๋Œ€ํ‘œ์ ์ธ merge์˜ ์ข…๋ฅ˜์ธ fast-forward์™€ 3-way m…

wikidocs.net

 

728x90