๐ŸŽฏ Git์„ ํ™œ์šฉํ•œ ํšจ๊ณผ์ ์ธ ํ˜‘์—…๊ณผ ๋ฒ„์ „ ๊ด€๋ฆฌ๋ฅผ ์ตํžˆ๊ณ , ์ถฉ๋Œ ํ•ด๊ฒฐ ๋Šฅ๋ ฅ์„ ํ–ฅ์ƒ์‹œ์ผœ ํŒ€ ํ”„๋กœ์ ํŠธ์—์„œ ์›ํ™œํ•œ ๊ฐœ๋ฐœ ์ง„ํ–‰์„ ๋ชฉํ‘œํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ“™ Today I Learned

Git branch ์‹ค์Šต

branch ์ด๋ฆ„

  • ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ : feature/login, feature/select-product
  • ์ถœ์‹œ ์ค€๋น„ : release-1.3, release-1.4
  • ๊ธด๊ธ‰ ์ˆ˜์ • : hotfix-1.2.1

branch ์ƒ์„ฑ ํ›„ ์˜ฌ๋ฆฌ๊ธฐ

โ—commit์„ ํ•˜๋ฉด ํ˜„์žฌ ์œ„์น˜ํ•œ ๋ธŒ๋žœ์น˜์— ๋‚ด์šฉ์ด ๋ฐ˜์˜๋˜๋ฏ€๋กœ, ๋ธŒ๋žœ์น˜ ์œ„์น˜ ํ™•์ธ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. (๋ธŒ๋žœ์น˜ ์œ„์น˜๋Š” ์™ผ์ชฝ ํ•˜๋‹จ์ด๋‚˜ git bash์—์„œ ํ™•์ธ ๊ฐ€๋Šฅ)

  • git branch -d ๋ธŒ๋žœ์น˜๋ช… : ํ•ด๋‹น branch๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

  • git branch -r : ํ˜„์žฌ ์›๊ฒฉ์ €์žฅ์†Œ์— ์—ฐ๊ฒฐ๋œ ๋ธŒ๋žœ์น˜๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

  • git log : commitํ•œ ๊ธฐ๋ก๋“ค์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

  • git push ์›๊ฒฉ์ €์žฅ์†Œ๋ณ„์นญ ๋ธŒ๋žœ์น˜๋ช… : ํ•ด๋‹น branch๋ฅผ ์›๊ฒฉ์ €์žฅ์†Œ์— ์˜ฌ๋ฆฝ๋‹ˆ๋‹ค.
    (์ง€๋‚œ ์‹œ๊ฐ„์— git branch feature/login์œผ๋กœ ๋งŒ๋“ค์—ˆ๋˜ branch)

โžก๏ธ ์ƒˆ๋กœ ์ƒ์„ฑํ•œ ๋ธŒ๋žœ์น˜๊ฐ€ ์›๊ฒฉ ์ €์žฅ์†Œ์— ๋ธŒ๋žœ์น˜๊ฐ€ ์˜ฌ๋ผ๊ฐ„ ๋ชจ์Šต


๋ณ‘ํ•ฉ ๋ฐฉ๋ฒ•

๋ณ‘ํ•ฉ(Merge) : Git์—์„œ ์—ฌ๋Ÿฌ branch๋ฅผ ํ•˜๋‚˜๋กœ ํ•ฉ์น˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค.

  • Fast forward merge
    A branch์—์„œ B branch๋ฅผ ๋งŒ๋“ค๊ณ , A branch์—๋Š” ๋ณ€๊ฒฝ์ด ์—†๊ณ  B branch์—์„œ๋งŒ ์ž‘์—…์„ ํ•œ ํ›„ ๋‘ branch๋ฅผ ๋ณ‘ํ•ฉํ•˜๋Š” ์ „๋žต์ž…๋‹ˆ๋‹ค.

    ์ถœ์ฒ˜: atlassian
  • 3-way merge
    A branch์™€ B branch์—์„œ ๋™์‹œ์— ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๊ณ , ๋‘ branch๋ฅผ ํ•ฉ์ณ์„œ ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„์„ ๋ณ‘ํ•ฉํ•˜๋Š” ์ „๋žต์ž…๋‹ˆ๋‹ค.

    ์ถœ์ฒ˜: atlassian



branch ๋ณ‘ํ•ฉ ์‹ค์Šต

์‹ค์Šต 1: Pushํ•œ ๋ธŒ๋žœ์น˜๋ฅผ main์— ๋ณ‘ํ•ฉ ( ๐Ÿ“Œ Fast Forward Merge )

  1. main ๋ธŒ๋žœ์น˜์—์„œ feature/login ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“ค๊ณ  ์ž‘์—…์„ ์ง„ํ–‰ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—, main ๋ธŒ๋žœ์น˜๋ฅผ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด Protect this branch ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ๋ธŒ๋žœ์น˜ ๋ณดํ˜ธ ์„ค์ •์„ ํ•ด์ค๋‹ˆ๋‹ค.
    (๊ฒฝ๋กœ : Repository > Settings > Branches )



  2. ๋ณดํ˜ธํ•  ๋ชฉ๋ก๋“ค์„ ์„ ํƒํ•˜์—ฌ์ค๋‹ˆ๋‹ค.


  1. branch๋ฅผ ๋ณ‘ํ•ฉํ•˜๊ธฐ ์œ„ํ•ด compare & pull request ๋ฒ„ํŠผ์„ ํ†ตํ•ด PR(Pull Request)๋ฅผ ํ•ด์ค๋‹ˆ๋‹ค.

    PR(Pull Request)๋ž€?
    ํ•œ ๋ธŒ๋žœ์น˜์—์„œ ์ž‘์—…ํ•œ ๋‚ด์šฉ์„ ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜์— ๋ณ‘ํ•ฉ์„ ์š”์ฒญํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

    (๋ฒ„ํŠผ์ด ์—†์–ด์ ธ๋„ Contribute ๋ฒ„ํŠผ์„ ํ†ตํ•ด์„œ PR ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค)


  2. ์ถ”๊ฐ€ํ•œ ๋‚ด์šฉ๋“ค์„ markdown์œผ๋กœ ์ ์€ ๋’ค Create pull request ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ์ค๋‹ˆ๋‹ค.


5.Merge pull request์„ ๋ˆŒ๋Ÿฌ merge commit์„ ์ ๊ณ  ๋ณ‘ํ•ฉํ•ด์ค๋‹ˆ๋‹ค.


  1. ํ•ด๋‹น branch์˜ ์—ญํ• ์ด ๋๋‚ฌ๊ธฐ ๋•Œ๋ฌธ์— branch๋ฅผ ์‚ญ์ œํ•ด์ค๋‹ˆ๋‹ค.


์‹ค์Šต 2: ์›๊ฒฉ ๋ธŒ๋žœ์น˜ ์‚ญ์ œ ํ›„ ๋กœ์ปฌ์—์„œ ๋™๊ธฐํ™” ( ๐Ÿ“Œ ๋™๊ธฐํ™” ๋ฐ ์ •๋ฆฌ )

  1. Github์—์„œ feature/login branch๋ฅผ ์‚ญ์ œํ•˜์˜€์ง€๋งŒ ๋กœ์ปฌ์—์„œ๋Š” ๊ทธ๋Œ€๋กœ์ธ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


  2. ์ด๋ฅผ ์œ„ํ•ด Github์™€ ๋™๊ธฐํ™”๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  • git fetch -p : ์›๊ฒฉ ์ €์žฅ์†Œ์™€ ๋กœ์ปฌ ์ €์žฅ์†Œ๋ฅผ ๋™๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. (-p๋Š” (prune)๊ฐ€์ง€์น˜๊ธฐ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.)


  1. git branch -r๋กœ ์›๊ฒฉ ๋ธŒ๋žœ์น˜ feature/login branch๊ฐ€ ํ™•์ธํ•˜๋ฉด ์‚ฌ๋ผ์ง„ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


โš ๏ธ ๋ฐœ์ƒํ•œ ์˜ค๋ฅ˜

๋กœ์ปฌ์—์„œ๋„ feature/login branch๋ฅผ ์‚ญ์ œ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด main์œผ๋กœ ์˜ฎ๊ฒจ๊ฐ€ ์‚ญ์ œ๋ฅผ ํ•˜๋ ค ํ–ˆ์ง€๋งŒ, error: the branch 'feature/login' is not fully merged ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์˜€์Šต๋‹ˆ๋‹ค.


๐Ÿ’ก ํ•ด๊ฒฐ ๊ณผ์ •

์›๊ฒฉ์ €์žฅ์†Œ์—์„œ merge๋œ ๊ฒƒ์„ ๊ฐ€์ ธ์˜จ ๋’ค์—์•ผ feature/login branch๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.


์‹ค์Šต 3: ์ถฉ๋Œ ์ƒํ™ฉ์—์„œ ๋ณ‘ํ•ฉ ( ๐Ÿ“Œ Manual Merge with Conflict Resolution )

  1. Github์—์„œ feature/1, feature/2 branch๋ฅผ ์ƒ์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.


  2. ์›๊ฒฉ์ €์žฅ์†Œ์— ์žˆ๋Š” branch๋ฅผ git fetch -p ๋กœ ๋™๊ธฐํ™”ํ•ด์ค๋‹ˆ๋‹ค.


  3. ์›๊ฒฉ ์ €์žฅ์†Œ์˜ feature/1 ๋ธŒ๋žœ์น˜๋ฅผ ๋กœ์ปฌ ์ €์žฅ์†Œ์— ์—ฐ๊ฒฐํ•ด์ค๋‹ˆ๋‹ค.

  • git checkout -t origin/๋ธŒ๋žœ์น˜์ด๋ฆ„ : ์›๊ฒฉ ์ €์žฅ์†Œ์—์„œ ์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜๋ฅผ ๋กœ์ปฌ ๋ธŒ๋žœ์น˜๋กœ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค.
    (-t๋Š” (track)์ถ”์ ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.)

    ๐Ÿค” ์™œ origin/์„ ๋ถ™์—ฌ์•ผ ํ• ๊นŒ?
    origin/์€ ์›๊ฒฉ ์ €์žฅ์†Œ์˜ ๊ธฐ๋ณธ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. git checkout -t ๋ธŒ๋žœ์น˜์ด๋ฆ„์—์„œ๋Š” ๋กœ์ปฌ ์ €์žฅ์†Œ๋กœ ๋ธŒ๋žœ์น˜๋ฅผ ์ฒดํฌ์•„์›ƒํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ, ์›๊ฒฉ ์ €์žฅ์†Œ์˜ ๋ธŒ๋žœ์น˜๋ฅผ ๋กœ์ปฌ์—์„œ ์ถ”์ ํ•˜๋ ค๋ฉด ์›๊ฒฉ ์ €์žฅ์†Œ ์ด๋ฆ„origin/์„ ๋ถ™์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.


  1. ์ถฉ๋Œ์„ ๊ฐ€์ •ํ•˜๊ธฐ ์œ„ํ•ด clone์„ ํ•˜์—ฌ feature/2 ๋ธŒ๋žœ์น˜์—์„œ ์ž‘์—…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.


  2. ๋™์ผํ•œ ํŒŒ์ผ์— ๋™์ผํ•œ ๊ณต๊ฐ„์— ๋‹ค๋ฅธ ๋‚ด์šฉ์„ ์จ์„œ ๊ฐ ๋ธŒ๋žœ์น˜(feature/1, feature/2)์— pushํ•ฉ๋‹ˆ๋‹ค.


  3. feature/1์„ ์•ž์„œ ํ–ˆ๋˜ pull request ๊ณผ์ •์„ ๊ฑฐ์น˜๊ณ  ๋ธŒ๋žœ์น˜๊นŒ์ง€ ์‚ญ์ œํ•ด์ค๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  main์œผ๋กœ checkout์„ ํ•œ ๋’ค git pull origin main์„ ํ†ตํ•ด main์— ์ €์žฅ๋œ ๋‚ด์šฉ์„ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  git branch -d feature/1์„ ํ†ตํ•ด ๋กœ์ปฌ ๋ธŒ๋žœ์น˜๋„ ์‚ญ์ œํ•ด์ค๋‹ˆ๋‹ค.


  1. ์ด์ œ feature/2๋ฅผ pull request๋ฅผ ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž๋™์ ์œผ๋กœ ๋ณ‘ํ•ฉํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ๋‚˜์˜ต๋‹ˆ๋‹ค.


  2. create pull request ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์ถฉ๋Œ์ด ๋ฐœ์ƒํ–ˆ๋‹ค๊ณ  ๋œน๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด resolve conflicts ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ์ค๋‹ˆ๋‹ค.



    ๊ทธ๋Ÿฌ๋ฉด ์ถฉ๋Œ์ด ์ƒ๊ฒจ๋‚œ ๋ถ€๋ถ„์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.


    ์ถฉ๋Œ์ด ์ผ์–ด๋‚œ ๋ถ€๋ถ„์—์„œ ๋‚จ๊ธธ ๋‚ด์šฉ๋งŒ์„ ๋‚จ๊ธด ํ›„ mark as resolved ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ณ  commit merge ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ์ค๋‹ˆ๋‹ค.


  3. ๊ทธ๋Ÿฌ๋ฉด ์ •์ƒ์ ์œผ๋กœ ๋ณ‘ํ•ฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋ณ‘ํ•ฉ์„ ํ•˜๊ณ  ๋˜‘๊ฐ™์ด branch๋ฅผ ์‚ญ์ œํ•ด์ค๋‹ˆ๋‹ค.


  4. ๋ฉ”์ธ ํ™”๋ฉด์—๋Š” feature/2์œผ๋กœ ๋ณ‘ํ•ฉ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋™์ผํ•˜๊ฒŒ git pull origin main์„ ํ†ตํ•ด main์— ์ €์žฅ๋œ ๋‚ด์šฉ์„ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  git branch -d feature/2์„ ํ†ตํ•ด ๋กœ์ปฌ ๋ธŒ๋žœ์น˜๋„ ์‚ญ์ œํ•ด์ค๋‹ˆ๋‹ค.


  1. ์ด์ œ feature1 ๋‚ด์šฉ์„ ์ ์—ˆ๋˜ ์œˆ๋„์šฐ์—์„œ๋Š” ๋‹ค๋ฅธ main์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์‹œ git pull origin main์œผ๋กœ ๋‹ฌ๋ผ์ง„ main ๋‚ด์šฉ์„ ๊ฐ€์ง€๊ณ  ์˜ต๋‹ˆ๋‹ค. โžก๏ธ ๋™์ผํ•˜๊ฒŒ ๋‚ด์šฉ์ด ๋งž์ถฐ์ง„ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿง ์˜ค๋Š˜์˜ ๋ฐœ๊ฒฌ

PR(Pull Request) ๊ณผ์ •, Git Conflicts ์ง์ ‘ ๋ฐœ์ƒ์‹œํ‚ค๋ฉฐ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์•Œ์•˜๊ณ , ๋˜ branch๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•๊ณผ ๋™๊ธฐํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ–‹๏ธ ํ•œ ์ค„ ํšŒ๊ณ 

๋ธŒ๋žœ์น˜ ์ƒ์„ฑ๊ณผ ๋ณ‘ํ•ฉ, ์ถฉ๋Œ ํ•ด๊ฒฐ ๊ณผ์ •์„ ์‹ค์Šตํ•˜๋ฉด์„œ ์ถฉ๋Œ ๊ณผ์ •์—์„œ ์–ด๋ ค์›Œํ•˜์ง€ ์•Š๊ณ  ํ•ด๋‚ผ ์ˆ˜ ์žˆ๋Š” ์ž์‹ ๊ฐ์„ ์–ป์€ ๊ฒƒ ๊ฐ™๋‹ค.

profile
๐ŸŒฑ๊ฐœ๋ฐœ ๊ธฐ๋ก์žฅ

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