๐Ÿ“ 2์ฃผ์ฐจ ์œ„ํด๋ฆฌ ํŽ˜์ดํผ ๋ฏธ์…˜

pjw__98ยท2023๋…„ 10์›” 28์ผ
1
post-thumbnail
๐Ÿ“Œ 2์ฃผ์ฐจ ์ปค๋ฆฌํ˜๋Ÿผ์—์„œ๋Š” ๋‹ค์–‘ํ•œ ๋ช…๋ น์–ด(command)๋“ค๊ณผ Git์— ๋Œ€ํ•ด ์ฃผ๋„์ ์œผ๋กœ ํ•™์Šตํ–ˆ๋‹ค.
2์ฃผ์ฐจ ํ•™์Šต์„ ๋๋งˆ์น˜๊ณ  ๋А๋‚€์ ์€,
Git์— ๋Œ€ํ•œ ์ปค๋งจ๋“œ๋“ค์„ ์–ด๋А์ •๋„ ์ˆ™์ง€ํ•˜๊ณ  ์žˆ์–ด์•ผ ํ˜‘์—…์„ ํ•  ๋•Œ ๋ง‰ํžˆ์ง€ ์•Š๊ณ  ์ˆ˜์›”ํ•˜๊ฒŒ
์—…๋ฌด๋ฅผ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์„๊ฒƒ ๊ฐ™์•˜๋‹ค.
2์ฃผ์ฐจ ์œ„ํด๋ฆฌ ํŽ˜์ดํผ ๋ฏธ์…˜์€ Git์— ๋Œ€ํ•œ ์ฃผ์ œ๋ฅผ ์„ ์ •ํ•ด์ฃผ์…จ๋‹ค.
  1. Git์—์„œ branch merge ๋ฐฉ๋ฒ•๋“ค๊ณผ ๊ฐ ๋ฐฉ๋ฒ•์˜ ํŠน์ง•์„ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

๐Ÿค”"branch"๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

์–ด๋– ํ•œ ํ”„๋กœ์ ํŠธ ์ž‘์—…์„ ์ง„ํ–‰ํ•  ๋•Œ ๊ฐœ์ธ์ ์œผ๋กœ ์ž‘์—…์„ ์ง„ํ–‰ ํ• ์ˆ˜์žˆ๊ฒŒ ํ•˜๋Š” ๊ณต๊ฐ„์ด๋‹ค.
๊ทธ๋ ‡๋‹ค๋ฉด ๋ธŒ๋žœ์น˜๋Š” ์–ด๋–ป๊ฒŒ ์ƒ์„ฑํ•˜๋Š”์ง€ , ๊ฐ ๋ช…๋ น์–ด๋“ค์˜ ํŠน์ง•์„ ์•Œ์•„๋ณด์ž.

๐Ÿ“Œ git branch [์ƒ์„ฑ๋ธŒ๋žœ์น˜์ด๋ฆ„] : ์ƒˆ ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•ด์ค€๋‹ค.
๐Ÿ“Œ git checkout [๋ธŒ๋žœ์น˜์ด๋ฆ„]: ๋ธŒ๋žœ์น˜๋กœ ์ด๋™ํ•˜๊ฑฐ๋‚˜ ์›Œํ‚น ํŠธ๋ฆฌ์˜ ํŒŒ์ผ์„ ๋ณต์›ํ•œ๋‹ค.
๐Ÿ“Œ git checkout -b [์ƒ์„ฑ๋ธŒ๋žœ์น˜์ด๋ฆ„] :๋ธŒ๋žœ์น˜๋ฅผ ์ƒˆ๋กœ ์ƒ์„ฑํ•ด์ฃผ๊ณ  ์ƒ์„ฑ๋œ ๋ธŒ๋žœ์น˜๋กœ ์ด๋™ํ•œ๋‹ค.
๐Ÿ“Œ git switch [๋ธŒ๋žœ์น˜์ด๋ฆ„]: ๋ธŒ๋žœ์น˜๋กœ ์ด๋™ํ•œ๋‹ค.
๐Ÿ“Œ git branch -d [๊ธฐ์กด ๋ธŒ๋žœ์น˜ ์ด๋ฆ„] : ๊ธฐ์กด์— ์žˆ๋Š” ๋ธŒ๋žœ์น˜๋ฅผ ์‚ญ์ œ ํ•œ๋‹ค.

์œ„์™€๊ฐ™์€ ๋ช…๋ น์–ด๋“ค์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—…์„ ์ง„ํ–‰ํ•  ๋•Œ ๊ฐœ์ธ๊ณต๊ฐ„(branch)์—์„œ ๋จผ์ € ์ฝ”๋“œ๊ฐ€ ์ž˜ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธ ์ž‘์—…์„ ๋ ๋งˆ์นœ ํ›„ merge๋ฅผ ํ†ตํ•ด ๊ฐœ์ธ์ ์ธ ๊ณต๊ฐ„๊ณผ ํ˜‘์—…ํ•˜๊ณ ์žˆ๋Š”
๋‹ค๋ฅธ๊ณต๊ฐ„์— ๋ณ‘ํ•ฉํ•ด์ฃผ๋Š” ์ˆœ์„œ๊ฐ€์žˆ๋‹ค.
์‰ฝ๊ฒŒ ๋งํ•ด ๋‚˜์˜ branch์—์„œ ํ™•์ธ ์ž‘์—…์ด ๋๋‚˜๋ฉด main branch์— ๋‚˜์˜ branch๋ฅผ ํ•ฉ์น ๋•Œ "merge" ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.


๐Ÿค”"merge" ๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

merge๋Š” ์•ž์„œ ๋งํ–ˆ๋“ฏ์ด ๋‘ ๋ธŒ๋žœ์น˜๋ฅผ ๋ณ‘ํ•ฉํ•ด์ฃผ๋Š” ํŠน์ง•์ด์žˆ๋‹ค.
main ๋ธŒ๋žœ์น˜๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ฐœ์ธ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑ ํ•˜๊ณ  ๊ฐœ์ธ ๋ธŒ๋žœ์น˜์—์„œ ์ˆ˜์ • ์ž‘์—…์„ ๋ ๋งˆ์นœ ํ›„ ์ž‘๋™์ด ์ž˜๋˜๋Š”์ง€ ํ™•์ธ ํ›„์— main ๋ธŒ๋žœ์น˜์™€ ๊ฐœ์ธ๋ธŒ๋žœ์น˜๋ฅผ ๋ณ‘ํ•ฉํ•ด์ค„๋•Œ merge๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

๐Ÿ“Œ "git merge (--ff) (fast-foward Merge)"
์ผ๋ฐ˜์ ์œผ๋กœ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” Merge ๋ฐฉ์‹์ด๋‹ค.
๊ฐ ์ƒํ™ฉ์— ๋”ฐ๋ผ Fast-forward, Recursive ๋ฐฉ์‹์œผ๋กœ ๋ณ‘ํ•ฉ๋˜๋ฉฐ Fast-forward๋Š” ์ƒˆ๋กœ์šด ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ์—†์ด ์ปค๋ฐ‹ ๋‚ด์šฉ์ด ์ ์šฉ๋˜๋ฉฐ Recursive๋Š” ํ•ฉ๋ณ‘ํ•  ๋•Œ ์ƒˆ๋กœ์šด ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ ์ปค๋ฐ‹ ๋‚ด์šฉ์ด ์ ์šฉ๋˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
์‰ฝ๊ฒŒ ๋งํ•ด ์ƒˆ ์ปค๋ฐ‹์„ ๋งŒ๋“ค์ง€ ์•Š๊ณ  ๋ณ‘ํ•ฉํ•˜๋ ค๋Š” ์ปค๋ฐ‹์„ ๊ฐ€๋ฅดํ‚ค๋Š” ํŠน์ง•์ด์žˆ๋‹ค.

๐Ÿ’ก Merge์˜ ์žฅ์  :
์–ด๋–ค ๋ธŒ๋žœ์น˜์—์„œ ์–ด๋–ค ์ปค๋ฐ‹์ด ์ง„ํ–‰๋˜์–ด ์–ด๋–ป๊ฒŒ ๋จธ์ง€ ๋˜์—ˆ๋Š”์ง€์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ˜… Merge์˜ ๋‹จ์  :
๋„ˆ๋ฌด ์ž์„ธํ•˜๊ฒŒ ํžˆ์Šคํ† ๋ฆฌ๊ฐ€ ๋‚จ๊ธฐ ๋•Œ๋ฌธ์— ๋ธŒ๋žœ์น˜์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์•„์ง€๊ฑฐ๋‚˜ ๋จธ์ง€ ํšŸ์ˆ˜๊ฐ€ ์žฆ์•„์งˆ์ˆ˜๋ก ํžˆ์Šคํ† ๋ฆฌ ๊ทธ๋ž˜ํ”„์˜ ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง„๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๐Ÿ“Œ "git merge --squash <๋ถ„๊ธฐ๋œ ๋ธŒ๋žœ์น˜๋ช…>"
๋ถ„๊ธฐ๋œ ๋ธŒ๋žœ์น˜์—์„œ ์ปค๋ฐ‹์ด ์ด๋ฃจ์–ด์ง€๊ณ  ์ปค๋ฐ‹๋œ ๋‚ด์šฉ์„ main ๋ธŒ๋žœ์น˜๋กœ ๊ฐ€์ ธ์™€ ์ƒˆ๋กœ์šด ์ปค๋ฐ‹์„ ๋งŒ๋“ค์–ด๋‚ด๊ณ  ๋ธŒ๋žœ์น˜๋ฅผ ์—†์•  ๋ธŒ๋žœ์น˜ ์ปค๋ฐ‹๋“ค์„ ์‚ญ์ œํ•˜๋Š” ๋ณ‘ํ•ฉ ๋ฐฉ์‹์„ ๋งํ•œ๋‹ค. ํŠน์ • ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค๊ณ  ๋‹ค๋ฅธ ๊ณต๊ฐ„์— ์ €์žฅํ•˜๊ณ ์‹ถ์„ ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

๐Ÿ“Œ Rebase and Merge

git rebase <base ๋ธŒ๋žœ์น˜๋ช…>
git checkout <base ๋ธŒ๋žœ์น˜๋ช…>
git merge <๋ถ„๊ธฐ๋œ ๋ธŒ๋žœ์น˜๋ช…>

์ปค๋ฐ‹ ๋‚ด์šฉ์„ Base๊ฐ€ ๋˜๋Š” ๋ธŒ๋žœ์น˜์— ์žฌ๋ฐฐ์น˜ํ•˜๊ณ  ์ถ”๊ฐ€๋กœ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ์—†์ด ๋ณ‘ํ•ฉ์„ ์ง„ํ–‰ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ฝ”๋“œ๋ฅผ ์œ ์ง€ํ•˜๊ณ ์‹ถ์€ ์ƒํ™ฉ์ผ ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.


๐Ÿ“Œ ์ถฉ๋Œ ์•ˆ๋‚˜๋„๋ก ํ•ด์ฃผ๋Š” ๋ช…๋ น์–ด

  • ๋Œ€์ƒ ๋ธŒ๋žœ์น˜๋กœ ์ด๋™
    git checkout [๋Œ€์ƒ๋ธŒ๋žœ์น˜]

  • ๋Œ€์ƒ ๋ธŒ๋Ÿฐ์น˜์˜ ๋กœ์ปฌ ์ตœ์‹ ํ™”
    git pull origin [๋Œ€์ƒ๋ธŒ๋žœ์น˜]

  • ๋‹ค์‹œ ๋‚ด ์ž‘์—… ๋ธŒ๋žœ์น˜๋กœ ์ด๋™
    git checkout {์ž‘์—… ๋ธŒ๋žœ์น˜}

  • ๋จธ์ง€ ์š”์ฒญ
    git merge [๋Œ€์ƒ๋ธŒ๋žœ์น˜]

  • ์ˆ˜์ • ํ›„, add, commit, push ์ง„ํ–‰

๐Ÿ‘๐Ÿป Refrence
branch

merge

merge2

branch & merge


  1. Git Flow ๋ธŒ๋žœ์น˜ ์ „๋žต์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

๐Ÿค” "Git Flow" ๋ž€ ๋ฌด์—‡์ธ๊ฐ€ ?

๋ธŒ๋žœ์น˜ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ํ˜‘์—… ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค๋ผ๋ฆฌ ๋ชจ์—ฌ ์ „๋žต์„ ๊ตฌ์„ฑํ•œ ๋ฐฉ๋ฒ•๋ก ์ด๋‹ค.

Git Flow ๋ฐฉ๋ฒ•๋ก ์—๋Š” ๊ฐ๊ฐ์˜ ๋ธŒ๋žœ์น˜ ๋ช…์นญ๊ณผ ๊ฐ ๋ธŒ๋žœ์น˜๋งˆ๋‹ค ์—ญํ• ์ด ์žˆ๋‹ค.

                                     -- Main branch -- 
                         
๐Ÿ“Œ master : ๊ธฐ์ค€์ด ๋˜๋Š” ๋ธŒ๋žœ์น˜๋กœ ์ œํ’ˆ์„ ๋ฐฐํฌํ•˜๋Š” ๋ธŒ๋žœ์น˜

๐Ÿ“Œ develop : ๊ฐœ๋ฐœ ๋ธŒ๋žœ์น˜๋กœ ๊ฐœ๋ฐœ์ž๋“ค์ด ์ด ๋ธŒ๋žœ์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ฐ์ž ์ž‘์—…ํ•œ ๊ธฐ๋Šฅ๋“ค์„ Merge

-----------------------------------------------------------------------------------------

          
                                  -- Support branch -- 
                         
๐Ÿ“Œ feature: ๋‹จ์œ„ ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋ธŒ๋žœ์น˜๋กœ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์ด ์™„๋ฃŒ๋˜๋ฉด develop ๋ธŒ๋žœ์น˜์— Merge

๐Ÿ“Œ release: ๋‹ค์Œ๋ฐฐํฌ๋ฅผ ์œ„ํ•ด ๊ธฐ๋Šฅ์— ๋ฌธ์ œ๊ฐ€ ์—†๋Š”์ง€ ํ’ˆ์งˆ์ฒดํฌ(QA) ์šฉ๋„์˜ ๋ธŒ๋žœ์น˜

๐Ÿ“Œ hotfix: master ๋ธŒ๋žœ์น˜๋กœ ๋ฐฐํฌ๋ฅผ ํ–ˆ๋Š”๋ฐ ๋ฒ„๊ทธ๊ฐ€ ์ƒ๊ฒผ์„ ๋–„ ๊ธด๊ธ‰ ์ˆ˜์ •ํ•˜๋Š” ๋ธŒ๋žœ์น˜

๐Ÿ“Œ support: ๋ฒ„์ „ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•œ ๋ธŒ๋žœ์น˜
  • Main branch๋Š” ์ค‘์š”ํ•œ ๋ธŒ๋žœ์น˜์ด๋‹ค.

  • Support branch๋Š” ์ƒํ™ฉ์— ๋”ฐ๋ผ ํ•„์š”์— ์˜ํ•ด ์‚ฌ์šฉ ๋˜๋Š” ๋ธŒ๋žœ์น˜์ด๋‹ค.

๐Ÿ’ก branch๋ฅผ mergeํ•  ๋•Œ ํ•ญ์ƒ -no-ff ์˜ต์…˜์„ ๋ถ™์—ฌ branch์— ๋Œ€ํ•œ ๊ธฐ๋ก์ด ์‚ฌ๋ผ์ง€๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๊ฒƒ์„ ์›์น™์œผ๋กœ ํ•œ๋‹ค.

์šฐ์•„ํ•œํ˜•์ œ๋“ค ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ (์šฐ๋ฆฐ Git-flow๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์–ด์š”)

master ๋ธŒ๋žœ์น˜์—์„œ develop ๋ธŒ๋žœ์น˜๋ฅผ ๋ถ„๊ธฐํ•ฉ๋‹ˆ๋‹ค.
๊ฐœ๋ฐœ์ž๋“ค์€ develop ๋ธŒ๋žœ์น˜์— ์ž์œ ๋กญ๊ฒŒ ์ปค๋ฐ‹์„ ํ•ฉ๋‹ˆ๋‹ค.
๊ธฐ๋Šฅ ๊ตฌํ˜„์ด ์žˆ๋Š” ๊ฒฝ์šฐ develop ๋ธŒ๋žœ์น˜์—์„œ feature-* ๋ธŒ๋žœ์น˜๋ฅผ ๋ถ„๊ธฐํ•ฉ๋‹ˆ๋‹ค.
๋ฐฐํฌ๋ฅผ ์ค€๋น„ํ•˜๊ธฐ ์œ„ํ•ด develop ๋ธŒ๋žœ์น˜์—์„œ release-* ๋ธŒ๋žœ์น˜๋ฅผ ๋ถ„๊ธฐํ•ฉ๋‹ˆ๋‹ค.
ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ฒ„๊ทธ ์ˆ˜์ •์€ release-* ๋ธŒ๋žœ์น˜์— ์ง์ ‘ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค.
ํ…Œ์ŠคํŠธ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด release ๋ธŒ๋žœ์น˜๋ฅผ master์™€ develop์— mergeํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ‘๐Ÿป Refrence

git Flow

git Flow2

profile
โ˜„๏ธ

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