[Git] merge

[์›๋ณธ ๋งํฌ]

์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” git merge์— ๋Œ€ํ•ด์„œ ๋‹ค๋ค„๋ณด๊ฒ ๋‹ค.

merge๋Š” ๋ง ๊ทธ๋Œ€๋กœ ๋ณ‘ํ•ฉ์„ ํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.
๋ธŒ๋žœ์น˜๋ผ๋ฆฌ ํ•ฉ์ณ์ค€๋‹ค.




๊ธฐ๋ณธ merge

๊ทธ๋ž˜์„œ ์ด๊ฒŒ ์™œ ํ•„์š”ํ•œ๊ฑธ๊นŒ?

git์œผ๋กœ ์ž‘์—…์„ ํ•˜๋‹ค๋ณด๋ฉด, ๊ธฐ๋Šฅ๋ณ„๋กœ ๋‚˜๋ˆ„๊ธฐ ์œ„ํ•ด์„œ๋“ , ๋ถ„์—…์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋“ , ๋ฐฐํฌ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋“ , ์•„๋ฌดํŠผ ๋ธŒ๋žœ์น˜๋ฅผ ์ชผ๊ฐœ์„œ ๊ฐœ๋ฐœ์„ ํ•˜๊ฒŒ ๋œ๋‹ค.

๋งŒ์•ฝ master๋ฅผ ๊ธฐ๋ณธ ๋ฐฐํฌ ๋ธŒ๋žœ์น˜๋กœ ํ•˜๊ณ  develop์„ ๊ฐœ๋ฐœ์šฉ ๋ธŒ๋žœ์น˜๋กœ ํ•œ๋‹ค๋ฉด,
develop์œผ๋กœ ๋จผ์ € ์ž‘์—…์„ ํ•ด์„œ ์–ด๋А์ •๋„ ์ž‘์—…์ด ์™„์„ฑ๋˜๊ณ  ๋‚œ ๋‹ค์Œ์—, develop์˜ ์ž‘์—…์‚ฌํ•ญ์„ master์— ํ†ตํ•ฉํ•ด์•ผ ํ•˜๋Š” ์‹์œผ๋กœ ์ง„ํ–‰์ด ๋œ๋‹ค.

๊ทธ๋Ÿผ ์ด๋Ÿฐ์‹์œผ๋กœ develop์— commit์„ ํ•˜๋‹ค๊ฐ€

์ด๋ ‡๊ฒŒ merge๋กœ master์— ํ•ฉ์ณ์ฃผ๋ฉด ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์ด๋ ‡๊ฒŒ๋งŒ ๋˜๋ฉด ์ฐธ ์ข‹๊ฒ ์ง€๋งŒ... ํ˜„์‹ค์€ ๊ทธ๋ ‡์ง€ ์•Š๋‹ค.




merge conflict

์œ„์˜ ๊ฒฝ์šฐ์—๋Š” ๊น”๋”ํ•˜๊ฒŒ ๋งž๋ฌผ๋ ค์žˆ๋Š” ๊ตฌ์กฐ๋ผ์„œ Fast-forward๋กœ ๋ฐ”๋กœ ์งํ†ต merge๊ฐ€ ์„ฑ๊ณตํ–ˆ๋Š”๋ฐ, ๋ฌธ์ œ๋Š”... ๊ทธ๋ ‡์ง€ ์•Š์„ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

๋งŒ์•ฝ ๋ณ‘ํ•ฉํ•˜๋Š” 2๊ฐœ์˜ ๋ธŒ๋žœ์น˜๊ฐ€ ํ•˜๋‚˜์˜ ์†Œ์ŠคํŒŒ์ผ์— ๋Œ€ํ•ด์„œ ๊ฐ๊ฐ ์ˆ˜์ •์„ ํ–ˆ๋‹ค๋ฉด, ์–ด๋А๋†ˆ์„ ๋ฐ˜์˜ํ•ด์ค˜์•ผ ํ•˜๊ฒ ๋‚˜?
์ด๊ฒŒ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๊ฒน์ณ์ง„๋‹ค๋ฉด git์ด ์•Œ์•„์„œ ํ•ด๊ฒฐ์„ ํ•ด์ฃผ๊ธฐ๋„ ํ•˜๋Š”๋ฐ, ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ์ถฉ๋Œ์„ ์ง์ ‘ ํ•ด๊ฒฐํ•ด์•ผ ํ•œ๋‹ค.

ํ•œ๋ฒˆ ์ƒํ™ฉ์„ ์žฌํ˜„ํ•ด๋ณด๊ฒ ๋‹ค.

master์—์„œ๋Š” ์ €๋ ‡๊ฒŒ ์ˆ˜์ •์„ ํ•˜๊ณ 

develop์—์„œ๋Š” ์ด๋ ‡๊ฒŒ ์ˆ˜์ •์„ ํ–ˆ๋‹ค.

์ด ์ƒํ™ฉ์—์„œ merge๋ฅผ ํ•œ๋‹ค๋ฉด, ๋ฌด์กฐ๊ฑด ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•œ๋‹ค.

๊ทธ๋„ ๊ทธ๋Ÿด๊ฒƒ์ด, lhs_1๋กœ ๋ฐ”๊พธ๋Š”๊ฒŒ ๋งž๋Š”์ง€, lhs_2๋กœ ๋ฐ”๊พธ๋Š”๊ฒŒ ๋งž๋Š”์ง€ git์ด ์–ด๋–ป๊ฒŒ ์•Œ๊ฒ ๋‚˜?

๊ทธ๋ž˜์„œ ์ด๋Ÿฐ์‹์œผ๋กœ ์„ ํƒ์ง€๋ฅผ ์ค€๋‹ค.

Accept Current Change๋ฅผ ์„ ํƒํ•˜๋ฉด ํ˜„์žฌ ๋ธŒ๋žœ๋“œ๋กœ ๋ฎ์–ด์”Œ์šฐ๊ณ , Accept Incoming Change๋ฅผ ํ•˜๋ฉด ๊ฐ€์ ธ์˜ค๋Š” ๋ธŒ๋žœ์น˜๋กœ ๋ฎ์–ด์“ด๋‹ค.
Accept Both Change๋กœ ํ•˜๋ฉด ๋‘˜๋‹ค ํ•ฉ์ณ๋ฒ„๋ฆฌ๊ธด ํ•˜๋Š”๋ฐ... ์–ต์ง€๋กœ ํ•ฉ์ณ๋ฒ„๋ฆฌ๋Š”์ง€๋ผ ๊ฒฐ๊ณผ๊ฐ€ ์ด์ƒํ• ๋•Œ๊ฐ€ ๋” ๋งŽ์•„์„œ ์“ฐ์ง€ ์•Š๋Š”๊ฑธ ๊ถŒํ•œ๋‹ค.

๋ญ˜๋กœ๋“  ์„ ํƒ์„ ํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ์ •๋ฆฌํ–ˆ๋‹ค๋ฉด, ์ปค๋ฐ‹์ฐ๊ณ  ๋งˆ์ € ์ž‘์—…ํ•˜๋ฉด ๋œ๋‹ค.




squash merge

squash๋Š” merge ์‚ฌํ•ญ์„ ํ•˜๋‚˜๋กœ ๋ญ‰์ณ์„œ ๋„ฃ์–ด๋ฒ„๋ฆฌ๊ณ  ์‹ถ์„๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ํ•˜๋‚˜์˜ merge ์ž‘์—…์‚ฌํ•ญ์— ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ปค๋ฐ‹์ด ๋“ค์–ด์žˆ๋‹ค๋ฉด

๋‹น์žฅ ์ž‘์—…ํ• ๋•Œ๋Š” ๊ดœ์ฐฎ์ง€๋งŒ, mergeํ• ๋•Œ ๋Œ€๋Ÿ‰์œผ๋กœ ์ปค๋ฐ‹๋‚ด์—ญ์ด ์šฐ๋ฅด๋ฅด ์Ÿ์•„์ ธ์„œ ๋ณด๊ธฐ๊ฐ€ ์ข€ ๋ถˆํŽธํ•  ์ˆ˜๊ฐ€ ์žˆ๋‹ค.

๊ทธ๋Ÿด๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.

์ด๋Ÿฐ์‹์œผ๋กœ ์ปค๋ฐ‹์ด ์—ฌ๋Ÿฌ๊ฐœ ๋ญ‰์ณ์žˆ๋Š” ์ƒํ™ฉ์—์„œ merge๋ฅผ ํ• ๋•Œ

--squash ์˜ต์…˜์„ ์ฃผ๊ณ 

์ปค๋ฐ‹๋ฉ”์„ธ์ง€๋ฅผ ์ƒˆ๋กœ ์จ์ฃผ๋ฉด

์ปค๋ฐ‹์„ ํ•˜๋‚˜๋กœ ๋ญ‰์ณ์„œ ๋งŒ๋“ค์–ด์ค€๋‹ค.
๊ทผ๋ฐ ์ด๊ฑด master์—๋งŒ ๋ญ‰์ณ์ค€๊ฑฐ๊ณ , develop์—๋Š” ํ•˜๋‚˜ํ•˜๋‚˜ ๋‹ค ๋‚จ์•„์žˆ๋‹ค.




rebase merge

์ด๊ฑด ์ „์šฉ ๋ช…๋ น์–ด๊ฐ€ ์žˆ๋Š”๊ฑด ์•„๋‹ˆ๊ณ , rebase์™€ merge๋ฅผ ์—ฐ๋‹ฌ์•„ ์‚ฌ์šฉํ•ด์„œ ์ฒ˜๋ฆฌํ•˜๋Š” idiom์„ ๋งํ•œ๋‹ค.

์ด merge๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, mergeํ•  ์ปค๋ฐ‹๋“ค์„ ๋Œ€์ƒ ๋ธŒ๋žœ์น˜์— ์–ต์ง€๋กœ ์‘ค์…”๋„ฃ๋Š”๋‹ค.
๋ญ‰์น˜์ง€๋„ ์•Š๊ณ  ๊ทธ๋Œ€๋กœ, ๋ธŒ๋žœ์น˜์™€์˜ ์—ฐ๊ด€์„ฑ ์—†์ด ๋ง์ด๋‹ค.

develop์— ์ปค๋ฐ‹์„ ๋จผ์ € ๋ช‡๊ฐœ ์„ธํŒ…ํ–ˆ๋‹ค.

๋ฐฉ๋ฒ•์€ ๊ฐ„๋‹จํ•˜๋‹ค.
mergeํ•˜๋Š” ๊ฒƒ๊ณผ ๋ฐ˜๋Œ€๋กœ rebase๋ฅผ ํ•˜๊ณ , ๋‹ค์‹œ ๋ฐ˜๋Œ€๋กœ ๋Œ์•„์™€์„œ merge๋ฅผ ํ•˜๋ฉด ๋œ๋‹ค.

rebaseํ• ๋•Œ conflict๊ฐ€ ์ข€ ๋‚ ์ˆ˜๋„ ์žˆ๋Š”๋ฐ, ๊ทธ๊ฑด ์•Œ์•„์„œ ์ž˜ ํ•ด๊ฒฐํ•˜์ž.

๊ทธ๋Ÿฌ๋ฉด ์ด๋Ÿฐ์‹์œผ๋กœ ๋ฉ”์„ธ์ง€๊ฐ€ ๊ทธ๋Œ€๋กœ ๋‹ค ๋“ค์–ด๊ฐ€์žˆ์„ ๊ฒƒ์ด๋‹ค.

๊ทผ๋ฐ ์ด๊ฑธ ์“ธ์ผ์ด ์žˆ๋‚˜?
์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค.




Pull Request (Github)

Github pull request์—์„œ merge๋ฅผ ํ• ๋•Œ๋„ ์ข…๋ฅ˜๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค.
๋™์ž‘์€ ์œ„์—์„œ ์„ค๋ช…ํ•œ ๊ฒƒ๋“ค๊ณผ ๋™์ผํ•˜๋‹ค.

ํ•„์š”์— ๋”ฐ๋ผ ์ž˜ ๊ณจ๋ผ์“ฐ๊ธธ ๋ฐ”๋ž€๋‹ค.





์ฐธ์กฐ
https://im-developer.tistory.com/182
https://meetup.toast.com/posts/122