์ƒ์„ธ ์ปจํ…์ธ 

๋ณธ๋ฌธ ์ œ๋ชฉ

[git] ์ƒ์กด์„ ์œ„ํ•œ Git : merge, rebase, cherry-pick, squash and merge

๐Ÿ˜Ž ์ง€์‹ in Action/Git, Jira ๐Ÿ› ๏ธ

by :ํ•ดํ”ผ๋ž˜๋น—๐Ÿพ 2024. 3. 15. 17:47

๋ณธ๋ฌธ

์ด๋Ÿฐ ์ƒํ™ฉ

๊ณผ๊ฑฐ์˜ ๋‚˜ : (๋ฌด์ง€์„ฑ) commit, merge 

ํ˜„์žฌ์˜ ๋‚˜ : (์•„! ์ƒ๊ฐ๋ณด๋‹ค ์ปค๋ฐ‹ ๊ธฐ๋ก์„ ํ™•์ธํ•  ์ผ์ด ์žˆ๋„ค.. ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ž‘ ๊ธฐ๋ก์„ ์ž˜ ๋‚จ๊ฒจ๋†”์•ผ ํ•˜๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์€ ์ƒํƒœ)

๊ทธ๋ž˜์„œ, merge, rebase, cherry-picksquash and merge ์— ๋Œ€ํ•ด ์ •๋ฆฌ๋ฅผ ์ง„ํ–‰ํ•ด๋ณด๋ คํ•œ๋‹ค


rebase

- ์ปค๋ฐ‹์ด ๋ถ„๊ธฐ๋˜๋Š” base๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ์ž‘์—…

- ๊ณตํ†ต๋œ ์ปค๋ฐ‹์œผ๋กœ๋ถ€ํ„ฐ ์ˆ˜์ •ํ•˜๋ ค๋Š” base ์ปค๋ฐ‹๊นŒ์ง€์˜ ์ฐจ์ด์ ์„

   1) ํŒจ์น˜(patch)์— ์ž„์‹œ๋กœ ์ €์žฅํ•˜๊ณ 

   2) ์ฐธ์กฐ ์ปค๋ฐ‹์„ ์ˆ˜์ •ํ•œ ํ›„

   3) ํŒจ์น˜(patch)๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ ์šฉํ•œ๋‹ค 

- ์ƒˆ๋กœ์šด commit์„ ๋งŒ๋“ค์ง€ ์•Š๋Š”๋‹ค 

 

์˜ˆ) v 2.1.0 ์ดํ›„์— 2๊ฐ€์ง€ ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€๋‹ค

issue1 : ํ•จ์ˆ˜ ๊ฒฐํ•จ ์ˆ˜์ •

issue2 : ํ•จ์ˆ˜ ์ถ”๊ฐ€

 

๋ฐฉ๋ฒ•1) ์ž‘์—…์šฉ ๋ธŒ๋žœ์น˜๋ผ๋ฆฌ ๋ณ‘ํ•ฉ์„ ๋งˆ์นœ ํ›„, ๋ฐฐํฌ์šฉ ๋ธŒ๋žœ์น˜์— ๋ณ‘ํ•ฉํ•˜๋Š” ๋ฐฉ๋ฒ• 

 

๋ฐฉ๋ฒ•2) ์ž‘์—… ์ข…๋ฅ˜๊ฐ€ ์œ ์‚ฌํ•œ ๋ธŒ๋žœ์น˜๋ผ๋ฆฌ ํ•œ์ค„๊ธฐ๋กœ ํ‘œ์‹œ๋˜๋„๋ก ์ •๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•

 

issue2์˜ base๋ฅผ issue1๋กœ ์žฌ๋ฐฐ์น˜ํ•˜๊ณ ์žํ•œ๋‹ค

issue2 ๋ธŒ๋žœ์น˜ :  git rebase issue1

rebase๋ฅผ ์ทจ์†Œ : git rebase --abort

์ถฉ๋Œ ํ•ด๊ฒฐํ›„ : git add . git rebase --continue

 

[rebase ์‚ฌ์šฉ ์˜ˆ์‹œ] https://jojoldu.tistory.com/120

 

์ด๋ฏธ ์ปค๋ฐ‹๋œ ๋‚ด์šฉ์—์„œ author(์ž‘์„ฑ์ž) ์ˆ˜์ •ํ•˜๊ธฐ

ํ•˜๋‚˜์˜ Source Tree๋กœ github ๊ณ„์ • ์—ฌ๋Ÿฌ๊ฐœ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๊ฐ„ํ˜น ์‹ ๊ทœ์ƒ์„ฑ or ์ƒˆ๋กœ ํด๋ก  ๋ฐ›์€ ์ €์žฅ์†Œ ์ž‘์„ฑ์ž๊ฐ€ ์›์น˜์•Š๋Š” ๊ณ„์ •์œผ๋กœ ๋“ฑ๋ก๋˜์–ด ์ปค๋ฐ‹๋  ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿด ๊ฒฝ์šฐ ์›ํ•˜๋Š” ๊ณ„์ •์œผ๋กœ ์ปค๋ฐ‹์ด

jojoldu.tistory.com


merge

Fast-Foward

๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ž‘์—…์ด ๋๋‚œ ๋‹ค์Œ master์— merge๋ฅผ ์ง„ํ–‰ํ•  ๋•Œ๊นŒ์ง€ master์— ์–ด๋– ํ•œ ๋ณ€๊ฒฝ๋„ ์—†๋Š” ๊ฒฝ์šฐ 

master๋ฅผ ์ƒˆ๋กœ ์ƒ์„ฑํ•œ ๋ธŒ๋žœ์น˜์™€ ๋™์ผํ•œ ์ปค๋ฐ‹์„ ๊ฐ€๋ฅดํ‚ค๋„๋ก ์ด๋™๋งŒ ํ•˜๋ฉด ๋œ๋‹ค

https://wikidocs.net/153693

 

 

3 Way Merge

base์—์„œ commit์„ ์ง„ํ–‰ํ•ด์„œ ๋ถ„๊ธฐํ•ด ๋‚˜๊ฐ„ ์ƒํƒœ

๋‘ ๋ธŒ๋žœ์น˜ ์ค‘ ์–ด๋А ๊ฒƒ๋„ base์— ์œ„์น˜ํ•˜์ง€ ์•Š์Œ

์ƒˆ๋กœ์šด commit์ด ์ƒ์„ฑ๋จ

 

 

--ff --no-ff --squash

fast-forward merge๊ฐ€ ๋˜๋ฉด์„œ master์— dev1์˜ commit์ด ๋ชจ๋‘ ํ•ฉ์ณ์ง

fast-forward merge ๊ฐ€ ์ผ์–ด๋‚˜์•ผํ•˜์ง€๋งŒ, non fast-forward๋กœ mergeํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ

 

--ff 

ํ˜„ ๋ธŒ๋žœ์น˜์™€ merge ๋Œ€์ƒ ๋ธŒ๋žœ์น˜๊ฐ€ fast-forward ๊ด€๊ณ„์— ์žˆ๋Š” ๊ฒฝ์šฐ ์ƒˆ๋กœ์šด commit์„ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ 

๋ธŒ๋žœ์น˜์˜ ์ฐธ์กฐ ๊ฐ’๋งŒ ๋ณ€๊ฒฝ๋˜๋„๋ก ํ•จ

fast-forward ๊ด€๊ณ„๊ฐ€ ์•„๋‹ˆ๋ฉด merge commit์„ ์ƒ์„ฑํ•จ

 

--no-ff

merge ๋Œ€์ƒ๊ณผ fast-forward ๊ด€๊ณ„์—ฌ๋„ ๊ฐ•์ œ๋กœ merge commit์„ ์ƒ์„ฑํ•˜๊ณ  ๋ณ‘ํ•ฉํ•จ

๋ธŒ๋žœ์น˜ ๊ด€๊ณ„์— ์ƒ๊ด€์—†์ด ํ•„์š”ํ•œ commit๋งŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Œ

์–ด๋–ค ๋ธŒ๋žœ์น˜์—์„œ merge ํ–ˆ๋Š”์ง€ ๊ธฐ๋ก์„ ๋‚จ๊ธธ ์ˆ˜ ์žˆ์Œ

 

--squash

commit ์ด๋ ฅ๊ณผ merge๋œ ๋ธŒ๋žœ์น˜ ์ด๋ ฅ๋„ ๋‚จ๊ธฐ์ง€ ์•Š์Œ

์ƒˆ๋กœ์šด commit์— ์ƒ๋Œ€ ๋ธŒ๋žœ์น˜์˜ ๋‚ด์šฉ์„ ๋ชจ๋‘ ๋ญ‰์ณ ๋†“์Œ

 

 


cherry-pick

์˜ˆ) v2.2.0๋ฒ„์ „ ๊ฐœ๋ฐœ ์ค‘, dev1, dev2 ๋ธŒ๋žœ์น˜๋ฅผ ๋‚˜๋ˆ ์„œ ์ž‘์—…์„ ์ง„ํ–‰ํ–ˆ๊ณ ,
dev2์—์„œ dev1์˜ ์ž‘์—…์„ ๋ณ‘ํ•ฉํ•˜๋ ค ํ•œ๋‹ค

๋‹ค๋งŒ, dev1 ๋ธŒ๋žœ์น˜์˜ ํ•œ๋‹จ๊ณ„ ์ด์ „ commit ์„ ๋ณ‘ํ•ฉํ•˜๋ ค ํ•œ๋‹ค

ํšŒ์ƒ‰ : dev1, ๋ณด๋ผ์ƒ‰ : dev2

 

๋ฐฉ๋ฒ•1) dev1 ๋ธŒ๋žœ์น˜๋ฅผ ์›ํ•˜๋Š” commit๊นŒ์ง€ hard resetํ•œ ํ›„ merging

- ๊ธฐ์กด์˜ ์ด๋ ฅ์„ ์‚ญ์ œํ•ด๋ฒ„๋ฆฐ๋‹ค

 

๋ฐฉ๋ฒ•2) git cherry-pick ๋ช…๋ น ์‚ฌ์šฉํ•˜๊ธฐ

- ๊ณผ๊ฑฐ ์ด๋ ฅ ์ค‘ ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ๊ฐ€์ ธ์˜จ๋‹ค

 

HEAD๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ํ˜„์žฌ ๋ธŒ๋žœ์น˜์— ํŠน์ • commit ์ถ”๊ฐ€ : git cherry-pick [commit hash]

cherry-pick ์ž‘์—… ์ทจ์†Œ : git cherry-pick --abort

์ถฉ๋Œ ํ•ด๊ฒฐํ›„ : git add . git cherry-pick --continue

merge commit์„ ์ถ”๊ฐ€ : git cherry-pick –m [parent number] [merge commit ID]

merge commit์˜ ๊ฒฝ์šฐ ์–ด๋–ค ๋ถ€๋ถ„์˜ merge๋ฅผ ๊ฐ€์ ธ์˜ฌ์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค. ๊ทธ๋ž˜์„œ parent number๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค.(1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋ฉฐ main line์ด 1)

 

cherry-pick์ด ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ์˜ˆ)

ํ˜‘์—…

A์™€ B๊ฐ€ ๋ถ„์—… ์ค‘, A๊ฐ€ ๋ณธ์ธ์ด ์ž‘์„ฑํ•œ ๋ถ€๋ถ„์„ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” B๊ฐ€ ๊ตฌํ˜„ํ•œ ๋ถ€๋ถ„์ด ํ•„์š”ํ•จ

B๊ฐ€ ์™„์„ฑ์ด ์•ˆ๋œ๊ฒฝ์šฐ, B๊ฐ€ ์ž‘์„ฑํ•œ commit ํ•˜๋‚˜๋งŒ ์ฐพ์•„์„œ A์˜ ๋ธŒ๋žœ์น˜์— ๊ฐ€์ ธ์™€์„œ ์‹œํ—˜

 

๋ฒ„๊ทธ ์ˆ˜์ • 

๊ธฐ๋Šฅ 1์„ ์™„์„ฑํ•˜๊ณ  ๊ธฐ๋Šฅ2๋ฅผ ๊ฐœ๋ฐœ ์ค‘. 

๋‚˜์ค‘์— ์•Œ๊ณ ๋ณด๋‹ˆ ๊ธฐ๋Šฅ1์— ๋ฒ„๊ทธ๊ฐ€ ์žˆ์Œ

์‚ฌ๋žŒ๋“ค์ด ๋ฒ„๊ทธ๋กœ ์ธํ•œ ๋ถˆํŽธ์„ ๊ฒช๊ธฐ ์ „์— ๋ฒ„๊ทธ ํŒจ์น˜๋ฅผ ํ•ด์„œ ๋ฐฐํฌ์šฉ ๋ธŒ๋žœ์น˜์— cherry-pick

 

 

 

 

 

 

 

 

 


[ ์ถœ์ฒ˜ ]

https://wikidocs.net/153693

728x90

๊ด€๋ จ๊ธ€ ๋”๋ณด๊ธฐ