git merge, merge ์ข ๋ฅ(Fast-forward Merge, 3-way Merge), merge conflict ๋ฐ์ ์ด์ ๋ฐ ํด๊ฒฐ ๋ฐฉ๋ฒ
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
- ํ์ฌ ๋ธ๋์น๊ฐ ๋ณํฉํ ๋ธ๋์น์ ์ง์ ์ ์ธ ์กฐ์์ผ ๋ ์ฌ์ฉ
- ๋จ์ํ ๋ธ๋์น ํฌ์ธํฐ๋ฅผ ์ต์ ์ปค๋ฐ์ผ๋ก ์ด๋์ํค๋ ๋ฐฉ์
3-way Merge
- ๋ ๋ธ๋์น์ ๊ณตํต ์กฐ์์ด ํ์ฌ ๋ธ๋์น๊ฐ ๊ฐ๋ฆฌํค๋ ์ปค๋ฐ์ด ์๋ ๋ ์ฌ์ฉ
- ๊ฐ ๋ธ๋์น์ ์ปค๋ฐ ๋ ๊ฐ์ ๊ณตํต ๋ถ๋ชจ ํ๋๋ฅผ ์ฌ์ฉํ์ฌ ์๋ก์ด ์ปค๋ฐ(Merge commit) ์์ฑ
3-way merge์ ๋์ ๊ณผ์
1. ๋ณํฉ ๊ธฐ์ค์ ์๋ณ
- 'base': ๋ ๋ธ๋์น์ ๊ณตํต ์กฐ์ ์ปค๋ฐ
- ๋ธ๋์น A์ ์ต์ ์ปค๋ฐ
- ๋ธ๋์น B์ ์ต์ ์ปค๋ฐ
2. ๋ณ๊ฒฝ์ฌํญ ๋ถ์ ๋ฐ ์๋ ๋ณํฉ
- Git์ base๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ฐ ๋ธ๋์น์ ๋ณ๊ฒฝ์ฌํญ์ ๋ถ์
- ํ์ผ๋ณ๋ก ๋ค์๊ณผ ๊ฐ์ ์ํฉ์ ์ฒ๋ฆฌ
- ํ ๋ธ๋์น์์๋ง ๋ณ๊ฒฝ๋ ํ์ผ: ์๋์ผ๋ก ํด๋น ๋ณ๊ฒฝ์ฌํญ ์ ์ฉ
- ์์ชฝ ๋ธ๋์น์์ ๋ค๋ฅธ ๋ถ๋ถ์ ๋ณ๊ฒฝ: ๋ ๋ณ๊ฒฝ์ฌํญ ๋ชจ๋ ์ ์ฉ
- ๋ณ๊ฒฝ๋์ง ์์ ํ์ผ: base์ ๋ด์ฉ ์ ์ง
merge conflict(๋ณํฉ ์ถฉ๋) ๋ฐ์ ๋ฐ ํด๊ฒฐ
์ถฉ๋ ๋ฐ์ ์ํฉ
- ๋ ๋ธ๋์น์์ ๊ฐ์ ํ์ผ์ ๋์ผํ ๋ถ๋ถ์ ๊ฐ๊ฐ ๋ค๋ฅด๊ฒ ์์ ํ ๊ฒฝ์ฐ
- Git์ด ์๋์ผ๋ก ์ด๋ ๋ณ๊ฒฝ์ฌํญ์ ์ ํํด์ผ ํ ์ง ํ๋จํ ์ ์๋ ์ํฉ
์ถฉ๋ ํด๊ฒฐ ๊ณผ์
- git status๋ก ์ถฉ๋ ํ์ผ ํ์ธ
- ์ถฉ๋ ํ์ผ์ ์ด์ด์ ์ถฉ๋ ๋ถ๋ถ ํ์ธ (์๋ marker ํฌ๋งท ์ฐธ๊ณ )
- ์ถฉ๋ ๋ถ๋ถ์ ์ํ๋ ๋ด์ฉ์ผ๋ก ์ง์ ์์
- ์ถฉ๋ ๋ง์ปค ์ญ์
- git add๋ก ํด๊ฒฐ๋ ํ์ผ staging
- git commit์ผ๋ก merge ์๋ฃ
Git์ด ์๋์ ๊ฐ์ ํ์์ผ๋ก ์ถฉ๋ ๊ฐ์งํ ํ์ผ์ <<<<<<<, =======, >>>>>>> Conflict Marker๋ฅผ ์ฝ์ ํ๋ค.
<<<<<<< HEAD
[ํ์ฌ ๋ธ๋์น์ ๋ณ๊ฒฝ ๋ด์ฉ]
=======
[๋ณํฉํ๋ ค๋ ๋ธ๋์น์ ๋ณ๊ฒฝ ๋ด์ฉ]
>>>>>>> [๋ณํฉํ๋ ค๋ ๋ธ๋์น ๋ช
]
merge ์ฌ์ฉ ์ ํ
- checkout, switch ์ ์๋ ํ์ฌ ์์ ๋ด์ฉ์ commitํ๊ฑฐ๋ ์คํ์(stash)ํ๋ ๊ฒ์ ๊ถ์ฅ
- ๋ณํฉ ์ถฉ๋ ๋ฐ์ ์ ์์ธํ ์ปค๋ฐ ๋ฉ์์ง(์ถฉ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ, ์ด์ )๋ฅผ ๊ธฐ๋กํ์ฌ ํ์ ํด๋น merge ์ปค๋ฐ์ ์ดํดํ๊ธฐ ์ฝ๊ฒ ํ๊ธฐ
- ๋ ์ด์ ํ์ ์๋ ๋ธ๋์น๋ ์ฆ์ ์ญ์ ํ์ฌ ๋ธ๋์น๋ฅผ ๊น๋ํ๊ฒ ๊ด๋ฆฌํ๊ธฐ ( git branch -d [์ญ์ ํ ๋ธ๋์น] )
์ฐธ๊ณ ์๋ฃ :
Git - ๋ธ๋์น์ Merge ์ ๊ธฐ์ด
Merge ์์ ๋ฐ์ํ ์ถฉ๋์ ๋ค๋ฃจ๋ ๋ ์ด๋ ต๊ณ ์์ํ ๋ด์ฉ์ ๋ค์ ๊ณ ๊ธ Merge ์์ ๋ค๋ฃจ๊ธฐ๋ก ํ๋ค.
git-scm.com
05-03 merge์ ์ข ๋ฅ : fast-forward, 3-way merge
๋ธ๋์น๊ฐ merging์ ํ ๋ ์๋ก์ด commit์ด ์๊ฒจ๋ ์๋ ์๊ณ , ๊ทธ๋ ์ง ์์ ์๋ ์๋ค. ๋ณธ ์ ์์๋ ๋ํ์ ์ธ merge์ ์ข ๋ฅ์ธ fast-forward์ 3-way m…
wikidocs.net