TIL 61: [Git] ๋ธŒ๋žœ์น˜ ๊ด€๋ฆฌ์™€ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ

๊ฐœ์ธ์ ์œผ๋กœ ํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋ฉด์„œ ๊นƒ ๋ธŒ๋žœ์น˜๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒฝํ—˜์ด ์žˆ๋Š”๋ฐ, ๋•๋ถ„์— ์ด๋ฒˆ ์ฑ•ํ„ฐ๋Š” ์ˆ˜์›”ํ•˜๊ฒŒ ํ•™์Šตํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค๐Ÿ˜Š

๋ธŒ๋žœ์น˜

๋ธŒ๋žœ์น˜๋ž€ ๋…๋ฆฝ์ ์œผ๋กœ ์–ด๋–ค ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๊ฐœ๋…์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ๊ฐœ๋ฐœ์„ ํ•  ๋•Œ ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š”๋ฐ ๋ธŒ๋žœ์น˜ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜๋ฉด ์›๋ž˜ ์ฝ”๋“œ๊ฐ€ ๋ณ€๊ฒฝ๋  ์œ„ํ—˜ ์—†์ด ๊ฐ๊ฐ์˜ ๊ธฐ๋Šฅ๋“ค์œผ ๋…๋ฆฝ์ ์œผ๋กœ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ธŒ๋žœ์น˜์—๋Š” ํ•ญ์ƒ ์œ ์ง€๋˜๋Š” ๋ฉ”์ธ ๋ธŒ๋žœ์น˜๋“ค (master, develop)๊ณผ ์ผ์ • ๊ธฐ๊ฐ„ ๋™์•ˆ๋งŒ ์œ ์ง€๋˜๋Š” ๋ณด์กฐ ๋ธŒ๋žœ์น˜๋“ค(feature, release, hotfix)์„ ํฌํ•จํ•ด์„œ ์ด 5๊ฐ€์ง€์˜ ๋ธŒ๋žœ์น˜๋ฅผ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค.

 

  • Master: ์ œํ’ˆ์œผ๋กœ ์ถœ์‹œ(๋ฐฐํฌ)๋  ์ˆ˜ ์žˆ์„ ์ •๋„๋กœ ๋ฒ„๊ทธ๊ฐ€ ์—†๋Š” ๋ธŒ๋žœ์น˜์ž…๋‹ˆ๋‹ค.
  • Develop: ๋ฒ ํƒ€ ๋ฒ„์ „. ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ๋ธŒ๋žœ์น˜๋“ค์„ ๋ณ‘ํ•ฉํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ธŒ๋žœ์น˜๋กœ ๋ฒ„๊ทธ๊ฐ€ ๋ชจ๋‘ ์ˆ˜์ •๋˜๊ณ  ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์•ˆ์ •์ ์ธ ์ƒํƒœ๋ผ๋ฉด master ๋ธŒ๋žœ์น˜์— ๋ณ‘ํ•ฉํ•ฉ๋‹ˆ๋‹ค.
  • Feature: ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ๋ฐ ๋ฒ„๊ทธ ์ˆ˜์ •์ด ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค develop ๋ธŒ๋žœ์น˜๋กœ๋ถ€ํ„ฐ ๋ถ„๊ธฐํ•œ ๋ธŒ๋žœ์น˜์ž…๋‹ˆ๋‹ค.
    ๋ณดํ†ต [feature/๊ธฐ๋Šฅ์š”์•ฝ] ํ˜•์‹์œผ๋กœ ๋„ค์ด๋ฐํ•ฉ๋‹ˆ๋‹ค.
  • Release: ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ์ „์šฉ ๋ธŒ๋žœ์น˜๋กœ ๊ฐœ๋ฐœ ๋‹จ๊ณ„๋ฅผ ๋Š๋Š”๋ฐ ๋„์™€์ฃผ๋Š” ๋ธŒ๋žœ์น˜์ž…๋‹ˆ๋‹ค. develop ๋ธŒ๋žœ์น˜์—์„œ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜์ค€์˜ ๊ธฐ๋Šฅ์ด ๋ชจ์ด๊ฑฐ๋‚˜ ์ •ํ•ด์ง„ ๋ฐฐํฌ ์ผ์ •์ด ๋˜๋ฉด release ๋ธŒ๋žœ์น˜๋ฅผ ๋ถ„๊ธฐํ•ฉ๋‹ˆ๋‹ค.
  • Hotfix: ๋ฐฐํฌํ•œ ๋ฒ„์ „์—์„œ ๊ธด๊ธ‰ํ•˜๊ฒŒ ๋ฒ„๊ทธ๋ฅด ์ˆ˜์ •ํ•ด์•ผ ํ•  ๋•Œ, master ๋ธŒ๋žœ์น˜์—์„œ ๋ถ„๊ธฐํ•œ ๋ธŒ๋žœ์น˜์ž…๋‹ˆ๋‹ค.

 

์ƒˆ๋กœ ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“ค์–ด๋„ ๋ฐ”๋กœ ๋ถ„๊ธฐ๊ฐ€ ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ฐ ๋ธŒ๋žœ์น˜๋งˆ๋‹ค ๋‹ฌ๋ผ์ง„ ์ฝ”๋“œ๊ฐ€ ์ƒ๊ธด ์ดํ›„๋ถ€ํ„ฐ ๋ถ„๊ธฐ๊ฐ€ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

 

 

 

๋ธŒ๋žœ์น˜ ๋ช…๋ น์–ด

๊ธฐ๋ณธ ๋ช…๋ น์–ด

์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ

  • $ git branch ์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜ ์ด๋ฆ„

์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ ํ›„ ํ•ด๋‹น ๋ธŒ๋žœ์น˜๋กœ ์ „ํ™˜

  • $ git switch -c ์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜ ์ด๋ฆ„
  • $ git checkout -b ์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜ ์ด๋ฆ„

๋ธŒ๋žœ์น˜ ๋ชฉ๋ก ํ™•์ธ

  • $ git branch

๋ธŒ๋žœ์น˜ ๋ชฉ๋ก๊ณผ ๊ฐ ๋ธŒ๋žœ์น˜์˜ ์ตœ๊ทผ ์ปค๋ฐ‹ ํ™•์ธ

  • $ git branch -v

๋ธŒ๋žœ์น˜ ์‚ญ์ œ

  • $ git branch -d ์‚ญ์ œํ•  ๋ธŒ๋žœ์น˜ ์ด๋ฆ„
  • $ git branch -D ํ•ด๋‹น ๋ช…๋ น์–ด๋Š” ๋ณ‘ํ•ฉํ•˜์ง€ ์•Š์€ ๋ธŒ๋žœ์น˜๋ฅผ ๊ฐ•์ œ ์‚ญ์ œํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

๋ธŒ๋žœ์น˜ ์ „ํ™˜

  • $ git switch ๋ธŒ๋žœ์น˜ ์ด๋ฆ„
  • $ git checkout ๋ธŒ๋žœ์น˜ ์ด๋ฆ„

๋ธŒ๋žœ์น˜ ๋ณ‘ํ•ฉ

  • master ๋ธŒ๋žœ์น˜๋กœ dev ๋ธŒ๋žœ์น˜๋ฅผ ๋ณ‘ํ•ฉํ•  ๋•Œ (master ← dev)
  1. $ git checkout master
  2. $ git merge dev

๋กœ๊ทธ์— ๋ชจ๋“  ๋ธŒ๋žœ์น˜๋ฅผ ๊ทธ๋ž˜ํ”„๋กœ ํ‘œํ˜„

  • $ git log --branches --graph --decorate

์•„์ง commit ํ•˜์ง€ ์•Š์€ ์ž‘์—…์„ ์Šคํƒ์— ์ž„์‹œ๋กœ ์ €์žฅ

  • $ git stash

 

merge์™€ rebase์˜ ์ฐจ์ด

๋‘ ๋ช…๋ น์–ด ๋ชจ๋‘ ๊ฐ๊ฐ์˜ ๋ธŒ๋žœ์น˜์— ์žˆ๋Š” ์ฝ”๋“œ๋“ค์„ ํ•ฉ์น˜๋Š” ๊ฒƒ์€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ merge๋Š” ๋ธŒ๋žœ์น˜๋ฅผ ํ†ตํ•ฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณ€๊ฒฝ ๋‚ด์šฉ์˜ ์ปค๋ฐ‹ ๊ธฐ๋ก์ด ๋ชจ๋‘ ๋‚จ์•„์žˆ์–ด ์ด๋ ฅ์ด ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค. ํ•œํŽธ, rebase๋Š” ๋ง ๊ทธ๋Œ€๋กœ ๋ฒ ์ด์Šค๋ฅผ ์ƒˆ๋กญ๊ฒŒ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด์ „์˜ ์ปค๋ฐ‹ ์ด๋ ฅ๋“ค์ด ๋‚จ์ง€ ์•Š์•„ ๋‹จ์ˆœํ•ด์ง‘๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ •ํ™•ํ•˜๊ฒŒ ๋ชจ๋“  ์ปค๋ฐ‹์„ ๋‚จ๊ฒจ์•ผ ํ•œ๋‹ค๋ฉด merge๋ฅผ ์“ฐ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
git rebase -i HEAD~~ ๋ผ๊ณ  ์น˜๋ฉด ์ด์ „ ํ•œ ๋‹จ๊ณ„ ์˜ฌ๋ผ๊ฐ€๋Š” ๊ธฐ๋Šฅ์„ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

 

 

 

 

 

ํ•œ ๋ธŒ๋žœ์น˜์—์„œ ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜๋กœ ์ž‘์—…ํ•œ ๋‚ด์šฉ์„ ์˜ฎ๊ธฐ๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ Cherry-pick ์ด๋ž€ ๊ฒƒ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
Git์˜ cherry-pick ์€ ์ปค๋ฐ‹ ํ•˜๋‚˜๋งŒ Rebase ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ† ํ”ฝ ๋ธŒ๋žœ์น˜์— ์žˆ๋Š” ์ปค๋ฐ‹ ์ค‘์—์„œ ํ•˜๋‚˜๋งŒ ๊ณ ๋ฅด๊ฑฐ๋‚˜ ํ† ํ”ฝ ๋ธŒ๋žœ์น˜์— ์ปค๋ฐ‹์ด ํ•˜๋‚˜๋ฐ–์— ์—†์„ ๋•Œ Rebase ๋ณด๋‹ค ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

'TIL > Git' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Git] Mac์—์„œ xcrun error ํ•ด๊ฒฐ  (0) 2022.05.08
TIL 10: Git ๊ธฐ์ดˆ  (0) 2021.07.30