• GIT

[GIT] Git flow / Rebase / Upstream

man_on 2021. 12. 17. 18:33
๋ฐ˜์‘ํ˜•

 

 

 

     


     

     

     

     

    Git flow

     

     

     

     

     

     

    ๐Ÿ”ป main๊ณผ ๊ฐœ์ธ ๋ธŒ๋žœ์น˜ ์‚ฌ์ด์— ์ค‘๊ฐ„ ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

    ? ์•„์ง ํ™•์ธ์ด ์ œ๋Œ€๋กœ ๋˜์ง€์•Š์€ feature branch๋ฅผ ์„ธ์ƒ๋ฐ–์— ๋ฐ”๋กœ ๋‚ด๋ณด๋‚ผ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์—,

       ๊ฐœ๋ฐœ์ž๋“ค๋ผ๋ฆฌ mergeํ•˜์—ฌ ๊ธฐ๋Šฅ์„ ํ…Œ์ŠคํŠธํ•˜๊ณ  ํ™•์ธํ•˜๋Š” branch๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

     

     

     

     โœ”๏ธ  main > develop > feature

     

    main branch

      : main์€ ์‹ค์ œ๋กœ ์ƒํ’ˆ ๋‹จ๊ณ„์—์„œ ๊ตฌ๋™๋˜๊ณ  ์žˆ๋Š” ๋‹จ๊ณ„์˜ ์ฝ”๋“œ๋“ค์ด ๋ชจ์—ฌ์žˆ๋‹ค. (production release์— ์‚ฌ์šฉ๋˜๋Š” branch)

    develop branch

      : ๋‹ค์Œ release์— ํฌํ•จ๋˜๊ธฐ ์œ„ํ•ด ์ƒ์„ฑ๋œ feature branch ์ฝ”๋“œ๊ฐ€ ๋ณ‘ํ•ฉ๋˜๋Š” ๋ธŒ๋žœ์น˜์ด๋‹ค.

    feature brnach

      : ์ƒˆ๋กœ ์ƒ์„ฑํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๋ธŒ๋žœ์น˜์ด๋‹ค.

     

     

     

     

     

     

    โœ”๏ธ main์œผ๋กœ ๋ณ‘ํ•ฉํ•˜๊ธฐ์ „์— ํฌ๊ฒŒ 2๋‹จ๊ณ„๋ฅผ ๊ฑฐ์นœ๋‹ค.

        develop ๋จธ์ง€๋œ ๊ธฐ๋Šฅ๋“ค์ด ์•ˆ์ •ํ™” ๋˜์žˆ๋Š” ์ฝ”๋“œ๋ผ๊ณ  ํŒ๋‹จ๋˜๋ฉด release branch๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

     

     

     

    Release 

    ๋ฒ„๊ทธ๋ฅผ ์ฐพ๊ณ , ๋ฒ„๊ทธ๋ฅผ ๊ณ ์น˜๋Š” branch

    develop ์—์„œ๋Š” ๊ณ„์†ํ•ด์„œ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ๋“ค์ด merge๋˜๊ณ  ์žˆ๋‹ค. 

     fix๋Š” release branch์—์„œ๋งŒ ์ด๋ฃจ์–ด์ง„๋‹ค. 

     ๋ฒ„๊ทธ๊ฐ€ ๋‹ค ๊ณ ์ณ์ง€๋ฉด ํ•ด๋‹น release branch๊ฐ€ main์— ๋ณ‘ํ•ฉ๋œ๋‹ค.

     

     

     

    Hotfix

    : production release ์ดํ›„์— ๋ฐœ๊ฒฌ๋œ ์˜ค๋ฅ˜ ์‚ฌํ•ญ์„ ์‹ ์†ํ•˜๊ฒŒ ์ˆ˜์ •

      ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œ main์—์„œ ๋ฐ”๋กœ hotfix branch๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๋ณ‘ํ•ฉ๋„ ๋ฐ”๋กœ main์œผ๋กœ ํ•œ๋‹ค.

     

     

     

    ์ „์ฒด์ ์ธ ํ๋ฆ„

     

     

    https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow

     

    Gitflow Workflow | Atlassian Git Tutorial

    A deep dive into the Gitflow Workflow. Learn if this Git workflow is right for you and your team with this comprehensive tutorial.

    www.atlassian.com

     

     

     

     

     

     


     

     

     

     

     

     

    Merge / Rebase

     

     

     

     

    ๐Ÿ“Œ   git merge๋Š” commit์„ ์˜ฎ๊ฒจ์˜ค๋Š” ๋™์ž‘ ๋ฐฉ์‹์ด๋‹ค.

          commit์˜ head๊ฐ€ ๊ฐ™๋‹ค๋Š” ๊ฐ€์ •ํ•˜์—, ์‹œ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ commit์ด ์˜ฎ๊ฒจ์ง„๋‹ค.

     

    feature/signup ์—์„œ main์œผ๋กœ merge
    main์—์„œ feature/sign-in์œผ๋กœ merge

     

    1. feature/signup (4๊ฐœ์˜ commit) ์—์„œ main์œผ๋กœ merge

        (signup์˜ 4๊ฐœ์˜ commit์ด main์œผ๋กœ ๋ณ‘ํ•ฉ๋˜์—ˆ๋‹ค. = ํ•œ ๋ธŒ๋žœ์น˜์— ์žˆ๋Š” commit์„ ๋‹ค๋ฅธ๋ธŒ๋žœ์น˜๋กœ ๊ฐ€์ ธ๊ฐ„๋‹ค.)

    2. feature/sign-in์˜ ์—ฐ๋‘์ƒ‰ commit ์‚ฌ์ด๋กœ sign-up์˜ ๋ถ„ํ™์ƒ‰๊ณผ main์˜ ๊ฒ€์ • commit์ด ๋“ค์–ด๊ฐ”๋‹ค.

     

     

    > ๋ฌธ์ œ

    1. ๋ณต์žกํ•œ project history

        : ๋…๋ฆฝ๋œ ๋ธŒ๋žœ์น˜์—์„œ ๋กœ์งํ•˜๋‚˜ ์ˆ˜์ •ํ•˜๋”๋ผ๋„, merge์ดํ›„์— ๋‹ค๋ฅธ commit ๋‚ด์—ญ๊ณผ ๊ฒน์ณ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์–ด๋ ต๋‹ค.

    2.  ๋ถˆํ•„์š”ํ•œ merge commit

        : ๋ชจ๋“  feature branch๋งˆ๋‹ค merge commit์ด ๋‚จ์œผ๋ฏ€๋กœ, 

         ๋งŽ์€ ๊ฐœ์ธ branch๋กœ ์ง„ํ–‰๋˜๋Š” ์ž‘์—…์ด main์œผ๋กœ ๋ชจ์ผ ์‹œ branch history๊ฐ€ ์ง€์ €๋ถ„ํ•ด์ง„๋‹ค.

     

     

     

     

     

     

    Git rebase

    re + base = commit์˜ base๋ฅผ ๋‹ค์‹œ ์žฌ์„ค์ •ํ•œ๋‹ค.

    ๊ณตํ†ต base๋ฅผ ๊ฐ€์ง„ ๋‘ ๋ธŒ๋žœ์น˜์—์„œ ํ•˜๋‚˜์˜ ๋ธŒ๋žœ์น˜์˜ base๋ฅผ ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜์˜ ์ตœ์‹  commit์œผ๋กœ rebaseํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

     

     

     

     

    Squash

    ์—ฌ๋Ÿฌ๊ฐœ์˜ commit์„ ํ•˜๋‚˜์˜ commit์œผ๋กœ ํ•ฉ์นœ๋‹ค.

     

     

     

     

    [Rebase๊ณผ์ •]

     

    1. develop ๋ธŒ๋žœ์น˜๋กœ ์ด๋™ํ•˜์—ฌ git pull origin develop

    2. push ํ•  ์ž‘์—… ๋ธŒ๋žœ์น˜๋กœ ๋Œ์•„์˜จ๋‹ค.

    3. `git rebase -i develop` ๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.

    4. squash ์ฐฝ์ด ๋œจ๋ฉด ๊ฐ€์žฅ ์˜ค๋ž˜๋œ commit์„ pick ํ•œ๋‹ค.

    5. ๋‹ค๋ฅธ ์ปค๋ฐ‹ ๋ฉ”์„ธ์ง€๋Š” ๊ฐ€์žฅ ์˜ค๋ž˜๋œ commit์„ ๊ธฐ์ค€์œผ๋กœ squash ํ•œ๋‹ค.

    6. Esc -> :wq! ๋กœ ์ฐฝ์—์„œ ๋น ์ ธ๋‚˜์˜จ๋‹ค.

    7. ์ˆ˜์ •์šฉ ์—๋””ํ„ฐ๊ฐ€ ํ•˜๋‚˜ ๋” ๋‚˜ํƒ€๋‚œ๋‹ค.

    8. ๋ถˆํ•„์š”ํ•œ ๋‚ด์šฉ์„ ์ œ๊ฑฐํ•˜๊ณ  ํ˜„์žฌ ์ˆ˜์ • ๋‚ด์—ญ์— ๋Œ€ํ•œ ์ปค๋ฐ‹ ๋ฉ”์„ธ์ง€๋ฅผ ์ •์„ฑ๊ป ์ž‘์„ฑํ•œ๋‹ค.

    9. Esc -> :wq! ์ €์žฅํ•˜๊ณ  ์—๋””ํ„ฐ์—์„œ ๋น ์ ธ๋‚˜์˜จ๋‹ค.

    10. ์„ฑ๊ณตํ–ˆ๋‹ค๋ฉด git log๋กœ ๊น”๋”ํ•ด์ง„ ์ปค๋ฐ‹ ๋ฉ”์„ธ์ง€๋ฅผ ํ•œ ๋ฒˆ ๊ฐ์ƒํ•˜๊ณ  ํ‘ธ์‰ฌํ•œ๋‹ค.

    11. ๋งŒ์•ฝ git์ด history๊ฐ€ ๋‹ค๋ฅธbranch์˜ push๋ฅผํ—ˆ์šฉํ•˜์ง€์•Š๋Š” ์ƒํƒœ๋ผ๋ฉด 

            `git push origin feature/branchname  -f`

            -f ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ force push๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค. 

     

     

     

     

     

     


     

     

     

     

     

     

    Upstream / Downstream

     

     

     

     

    [๊ฐœ๋…]

    git remote add origin ...

    init ํ–‡์„ ๋•Œ origin์„ ์ง์ ‘ addํ•˜๋Š”๋ฐ,  ์—ฌ๊ธฐ์„œ origindl github์— ์กด์žฌํ•˜๋Š” repository ์ฆ‰, remote๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

    remote = origin

     

    upstream๊ณผ downstream์€ ์ƒ๋Œ€์ ์ธ ๊ฐœ๋…์ด๋‹ค.

    origin๊ณผ local๊ธฐ์ค€์œผ๋กœ ์ƒ๊ฐํ•˜๋ฉด origin์ด up, local์ด down์ด ๋œ๋‹ค.

    git push -u origin main

    ์—ฌ๊ธฐ์„œ -u ์˜ต์…˜์ด --set-upstream์˜ ์ค„์ž„์œผ๋กœ upstream์„ ์„ค์ •ํ•œ๋‹ค๋Š” ๋œป์ด๋‹ค.

    upstream์„ ํ•œ๋ฒˆ ์„ค์ •ํ•˜๊ณ  ๋‚˜๋ฉด ๋‹ค์Œ๋ถ€ํ„ฐ๋Š” git push ๋˜๋Š” git pull ๋ช…๋ น์–ด๋งŒ ์ž…๋ ฅํ•ด๋„ ์ž๋™์œผ๋กœ origin์˜ main ๋ธŒ๋žœ์น˜๋กœ๋ถ€ํ„ฐ push์™€ pull์ด ์‹คํ–‰๋œ๋‹ค. (up๊ณผ down์˜ ๊ด€๊ณ„๊ฐ€ ์„ค์ •๋˜์–ด์„œ)

     

     

     

     


    [์„ค์ •]

     

    forkํ•œ repository clone

    git remote add origin [forkํ•œURL]

     

     

    upstream repository ์—ฐ๊ฒฐ

    git remote add upstream [URL]
    
    //ํ™•์ธ
    git remote
    >origin
    >upstream

     

     

     

     

     


     

     

     

     

     

    Forking Workflow

     

     

    GitHub์—์„œ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ์— ๊ธฐ์—ฌํ•˜๊ฑฐ๋‚˜, ํ˜‘์—…์„ ์ง„ํ–‰ํ•  ๋•Œ fork๋ฅผ ์ด์šฉํ•˜๊ฒŒ ๋œ๋‹ค.

    fork๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ repository๋ฅผ ๋‚ด ์†Œ์œ ์˜ repository๋กœ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

    ์›๋ž˜ ์†Œ์œ ์ž์˜ remote๊ฐ€ upstream, ๋‚ด๊ฐ€ forkํ•œ remote๊ฐ€ origin์ด๋ผ๋Š” ์šฉ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ๋œ๋‹ค.

     

     

     

     

    [ํ˜‘์—…์‹œ ํ”„๋กœ์„ธ์Šค]

    1. upstream : ์›๋ณธ remote repository๋ฅผ github์—์„œ fork

    2. origin : forkํ•œ remote repository๋ฅผ git client๋กœ clone

    3. origin์—์„œ ์ž‘์—… [๋ฐ˜๋ณต]

          1. cloneํ•œ repository (local)์— commit (branch)

          2. local(branch)์—์„œ origin์œผ๋กœ push 

    git push -u origin branchname

    4. upstream์— ๋ฐ˜์˜

         - PR๋“ฑ๋ก ์ „ upstream์—์„œ ๋ฐ”๋€๋‚ด์šฉ ์—†๋Š” ๊ฒฝ์šฐ

             : origin์—์„œ upstream์œผ๋กœ PR

         - ๋ฐ”๋€๋‚ด์šฉ ์žˆ์„ ๊ฒฝ์šฐ

     

             1. upstream์„ local๋กœ pull

    git pull upstream main

           

             2. local์—์„œ origin์œผ๋กœ push

    git push origin main

         

            3. origin์—์„œ upstream์œผ๋กœ PR   

         

     

     

     

     

     

     

    ๋ฐ˜์‘ํ˜•