โ€ป ์ด ํฌ์ŠคํŒ…์€ Learn Git Branching ์‚ฌ์ดํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ด๋‹ค.

Learn Git Branching

 

Learn Git Branching

An interactive Git visualization tool to educate and challenge!

learngitbranching.js.org

Git์„ ์“ธ ๋•Œ ํ•„์š”ํ•œ ๋ธŒ๋žœ์น˜์— ๋Œ€ํ•œ ๊ฐœ๋…์„ ์žก์„ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด ์ œ์ž‘๋œ ์‚ฌ์ดํŠธ๋กœ, Peter Cottle์ด๋ผ๋Š” ์ œ์ž‘์ž์˜ LearnGitBranching์„ ๋ฒˆ์—ญํ•œ ๋ฒ„์ „์ด๋ผ๋‹ˆ ์ฐธ๊ณ ํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค.


 

Git Branch ๋ฐฐ์šฐ๊ธฐ


Git ๋ช…๋ น์–ด

: ์—ฐ์Šต ๋ชจ๋“œ์—์„œ ์“ธ ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ git๋ช…๋ น์–ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • commit
  • branch
  • checkout
  • cherry-pick
  • reset
  • revert
  • rebase
  • merge

๊ทธ ์™ธ์—, ์ด ์‚ฌ์ดํŠธ์—์„œ ๊ฐ€๋Šฅํ•œ ๊ธฐ๋Šฅ๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • export tree, import tree : ํŠธ๋ฆฌ ๊ณต์œ 
  • build level : ๋ ˆ๋ฒจ ๋งŒ๋“ค๊ธฐ
  • import level : ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ๋ ˆ๋ฒจ์„ ๊ฐ€์ ธ์™€์„œ ์‹คํ–‰ํ•˜๊ธฐ

 

 

Git Commits

Commit : Git ์ €์žฅ์†Œ์— ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด ๋ชจ๋“  ํŒŒ์ผ์— ๋Œ€ํ•œ ์Šค๋ƒ…์ƒท์„ ๊ธฐ๋กํ•˜๋Š” ๊ฒƒ.

๋””๋ ‰ํ† ๋ฆฌ ์ „์ฒด๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ ๋ถ™์—ฌ๋„ฃ๋Š” ๊ฒƒ๊ณผ ์œ ์‚ฌํ•˜์ง€๋งŒ, ํ›จ์”ฌ ์œ ์šฉํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค. Git์€ ๊ฐ€๋Šฅํ•œ ํ•œ ์ปค๋ฐ‹์„ ๊ฐ€๋ณ๊ฒŒ ์œ ์ง€ํ•˜๊ณ ์ž ํ•˜๊ธฐ๋•Œ๋ฌธ์—, ์ปค๋ฐ‹ํ•  ๋•Œ๋งˆ๋‹ค ๋””๋ ‰ํ† ๋ฆฌ ์ „์ฒด๋ฅผ ๋ณต์‚ฌํ•˜์ง„ ์•Š๋Š”๋‹ค. ๊ฐ ์ปค๋ฐ‹์€ ์ €์žฅ์†Œ์˜ ์ด์ „ ๋ฒ„์ „๊ณผ ๋‹ค์Œ ๋ฒ„์ „์˜ ๋ณ€๊ฒฝ๋‚ด์—ญ(="delta")์„ ์ €์žฅํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ๋Œ€๋ถ€๋ถ„์˜ ์ปค๋ฐ‹์ด ๊ทธ ์ปค๋ฐ‹ ์œ„์˜ ๋ถ€๋ชจ ์ปค๋ฐ‹์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

์ €์žฅ์†Œ๋ฅผ ๋ณต์ œ(clone)ํ•˜๋ ค๋ฉด ๋ชจ๋“  ๋ณ€๊ฒฝ๋ถ„(delta)๋ฅผ ํ’€์–ด๋‚ด์•ผ ํ•˜๋Š”๋ฐ, ์ด ๋•Œ๋ฌธ์— ๋ช…๋ นํ–‰ ๊ฒฐ๊ณผ๋กœ ์•„๋ž˜ ๋ฌธ๊ตฌ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

resolving deltas

์ผ๋‹จ์€ ์ปค๋ฐ‹์„ ํ”„๋กœ์ ํŠธ์˜ ์Šค๋ƒ…์ƒท๋“ค๋กœ ์ƒ๊ฐํ•˜๋ฉด ์ถฉ๋ถ„ํ•˜๋‹ค. ์ปค๋ฐ‹์€ ๋งค์šฐ ๊ฐ€๋ณ๊ณ  ์ปค๋ฐ‹ ์‚ฌ์ด์˜ ์ „ํ™˜๋„ ๋งค์šฐ ๋น ๋ฅด๋‹ค.

์ปค๋ฐ‹์€ ์•„๋ž˜์™€ ๊ฐ™์ด ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์ €์žฅ์†Œ ๋‚ด์šฉ์„ ๋ณ€๊ฒฝํ•ด์„œ ํ•˜๋‚˜์˜ ์ปค๋ฐ‹์œผ๋กœ ์ €์žฅํ•œ๋‹ค.

git commit

๋ฐฉ๊ธˆ ๋งŒ๋“  ์ปค๋ฐ‹. ๋ถ€๋ชจ๋Š” C1์ด๊ณ , ๋ถ€๋ชจ๋ž€ ์–ด๋–ค ์ปค๋ฐ‹์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ณ€๊ฒฝ๋œ ๊ฒƒ์ธ์ง€๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

 

 

Git Branches

๊นƒ์˜ ๋ธŒ๋žœ์น˜๋„ ๋งค์šฐ ๊ฐ€๋ณ๋‹ค. ๋ธŒ๋žœ์น˜๋Š” ํŠน์ • ์ปค๋ฐ‹์— ๋Œ€ํ•œ ์ฐธ์กฐ(reference)์— ์ง€๋‚˜์ง€ ์•Š๋Š”๋ฐ, ์ด๋Ÿฐ ์‚ฌ์‹ค ๋•Œ๋ฌธ์— ์ˆ˜๋งŽ์€ Git ์• ์ฐฌ๋ก ์ž๋“ค์ด ์ž์ฃผ ์ด๋ ‡๊ฒŒ ๋งํ•˜๊ณ ๋Š” ํ•œ๋‹ค.

branch early, and branch often

๋ธŒ๋žœ์น˜๋ฅผ ๋งŽ์ด ๋งŒ๋“ค์–ด๋„ ๋ฉ”๋ชจ๋ฆฌ๋‚˜ ๋””์Šคํฌ ๊ณต๊ฐ„์— ๋ถ€๋‹ด์ด ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ์ž‘์—…์„ ์ปค๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜๋กœ ๋งŒ๋“ค๊ธฐ ๋ณด๋‹ค, ์ž‘์€ ๋‹จ์œ„๋กœ ์ž˜๊ฒŒ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

์šฐ์„ ์€, ๋‹จ์ˆœํžˆ ๋ธŒ๋žœ์น˜๋ฅผ "ํ•˜๋‚˜์˜ ์ปค๋ฐ‹๊ณผ ๊ทธ ๋ถ€๋ชจ ์ปค๋ฐ‹๋“ค์„ ํฌํ•จํ•˜๋Š” ์ž‘์—… ๋‚ด์—ญ"์ด๋ผ๊ณ  ๊ธฐ์–ตํ•˜๋ฉด ๋œ๋‹ค.

git branch newImage           # newImage๋ผ๋Š” ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ
git checkout newImage         # newImage๋ผ๋Š” ๋ธŒ๋žœ์น˜๋กœ ์ด๋™
 
 
 
 
 
 
 

Branches and Merging

์ด์ œ ๋‘ ๊ฐœ์˜ ๋ธŒ๋žœ์น˜๋ฅผ ํ•ฉ์น˜๋Š” ๋ช‡๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณผ ๊ฒƒ์ด๋‹ค. ํ•™์Šต ํ›„์—๋Š” ๋ธŒ๋žœ์น˜๋ฅผ ๋”ฐ๊ณ , ์ƒˆ ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœ ํ•œ ๋‹ค์Œ ํ•ฉ์น  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

- git merge : Git์˜ merge๋Š” ๋‘ ๊ฐœ์˜ ๋ถ€๋ชจ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํŠน๋ณ„ํ•œ ์ปค๋ฐ‹์„ ๋งŒ๋“ค์–ด๋‚ธ๋‹ค. ๋‘๊ฐœ์˜ ๋ถ€๋ชจ๊ฐ€ ์žˆ๋Š” ์ปค๋ฐ‹์ด๋ผ๋Š” ๊ฒƒ์€ "ํ•œ ๋ถ€๋ชจ์˜ ๋ชจ๋“  ์ž‘์—…๋‚ด์—ญ๊ณผ ๋‚˜๋จธ์ง€ ๋ถ€๋ชจ์˜ ๋ชจ๋“  ์ž‘์—…, ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๋‘ ๋ถ€๋ชจ์˜ ๋ชจ๋“  ๋ถ€๋ชจ๋“ค์˜ ์ž‘์—…๋‚ด์—ญ์„ ํฌํ•จํ•œ๋‹ค"๋ผ๋Š” ๋œป์„ ์˜๋ฏธํ•œ๋‹ค.

 

git merge bugFix        # bugFix ๋ธŒ๋žœ์น˜๋ฅผ ํ˜„์žฌ ๋ธŒ๋žœ์น˜์— ํ•ฉ์น˜๊ธฐโ€‹

์™ผ์ชฝ ๊ทธ๋ฆผ์„ ๋ณด๋ฉด, ๋ธŒ๋žœ์น˜๊ฐ€ ๋‘ ๊ฐœ ์žˆ๊ณ , ๊ฐ ๋ธŒ๋žœ์น˜์— ๋…๋ฆฝ๋œ ์ปค๋ฐ‹์ด ํ•˜๋‚˜์”ฉ ์žˆ๋‹ค. ์ฆ‰, ์ด ์ €์žฅ์†Œ์— ์ง€๊ธˆ๊นŒ์ง€ ์ž‘์—…ํ•œ ๋‚ด์—ญ์ด ๋‚˜๋‰˜์–ด ๋‹ด๊ฒจ ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. ๋‘ ๋ธŒ๋žœ์น˜๋ฅผ ํ•ฉ์ณ์„œ(merge) ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. bugFix ๋ธŒ๋žœ์น˜๋ฅผ main ๋ธŒ๋žœ์น˜์— ํ•ฉ์ณ๋ณด๋ฉด ์˜ค๋ฅธ์ชฝ ๊ทธ๋ฆผ์ด ๋œ๋‹ค. * ๋ธŒ๋žœ์น˜๊ฐ€ ํ•ฉ์ณ์ง€๋Š” ์ปค๋ฐ‹์˜ ๊ฒฝ์šฐ์—๋Š”, ๊ทธ ๋ธŒ๋žœ์น˜๋“ค์˜ ์ƒ‰์„ ์กฐํ•ฉํ•œ ์ƒ‰์ƒ์œผ๋กœ ํ‘œ์‹œ

 

์ด์ œ main ๋ธŒ๋žœ์น˜์— bugFix๋ฅผ ํ•ฉ์ณ๋ณด์ž.

git checkout bugFix                # bugFix๋กœ ์ด๋™
git merge main                     # ํ˜„ ๋ธŒ๋žœ์น˜๋ฅผ main์ด๋ผ๋Š” ๋ธŒ๋žœ์น˜์— ํ•ฉ์ณ ๋„ฃ๊ธฐ

 

 

Git Rebase

๋ธŒ๋žœ์น˜๋ผ๋ฆฌ์˜ ์ž‘์—…์„ ์ ‘๋ชฉํ•˜๋Š” ๋‘๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ ๋ฆฌ๋ฒ ์ด์Šค(rebase)์ด๋‹ค. ๋ฆฌ๋ฒ ์ด์Šค๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ปค๋ฐ‹๋“ค์„ ๋ชจ์•„์„œ ๋ณต์‚ฌํ•œ ๋’ค, ๋‹ค๋ฅธ ๊ณณ์— ๋–จ๊ถˆ ๋†“๋Š” ๊ฒƒ์ด๋‹ค.

๋ฆฌ๋ฒ ์ด์Šค๋ฅผ ํ•˜๋ฉด ์ปค๋ฐ‹๋“ค์˜ ํ๋ฆ„์„ ๋ณด๊ธฐ ์ข‹๊ฒŒ ํ•œ ์ค„๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. ๋ฆฌ๋ฒ ์ด์Šค๋ฅผ ์“ฐ๋ฉด ์ €์žฅ์†Œ์˜ ์ปค๋ฐ‹ ๋กœ๊ทธ์™€ ์ด๋ ฅ์ด ํ•œ๊ฒฐ ๊นจ๋—ํ•ด์ง„๋‹ค.

 

์—ฌ๊ธฐ ๋ธŒ๋žœ์น˜ ๋‘ ๊ฐœ๊ฐ€ ์žˆ๋‹ค.  โœ” bugFix๋ธŒ๋žœ์น˜๊ฐ€ ํ˜„์žฌ ์„ ํƒ๋๋‹ค๋Š” ์ ( * ํ‘œ์‹œ)์„ ํ™•์ธํ•˜์ž.

bugFix ๋ธŒ๋žœ์น˜์—์„œ์˜ ์ž‘์—…์„ main ๋ธŒ๋žœ์น˜ ์œ„๋กœ ์ง์ ‘ ์˜ฎ๊ฒจ ๋†“์œผ๋ ค๊ณ  ํ•œ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด, ์‹ค์ œ๋กœ๋Š” ๋‘ ๊ธฐ๋Šฅ์„ ๋”ฐ๋กœ๋”ฐ๋กœ ๊ฐœ๋ฐœํ–ˆ์ง€๋งŒ, ๋งˆ์น˜ ์ˆœ์„œ๋Œ€๋กœ ๊ฐœ๋ฐœํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๊ฒŒ ๋œ๋‹ค.

git rebase main                 # ์„ ํƒ๋œ ๋ธŒ๋žœ์น˜์˜ ๋‚ด์šฉ์„ main์ด๋ผ๋Š” ๋ธŒ๋žœ์น˜์— ๋ฆฌ๋ฒ ์ด์Šคํ•˜๊ธฐ

์ด์ œ bugFix ๋ธŒ๋žœ์น˜์˜ ์ž‘์—… ๋‚ด์šฉ์ด main์˜ ๋ฐ”๋กœ ์œ„์— ๊น”๋”ํ•œ ํ•œ ์ค„์˜ ์ปค๋ฐ‹์œผ๋กœ ๋ณด์ด๊ฒŒ ๋˜์—ˆ๋‹ค. C3 ์ปค๋ฐ‹์€ ์–ด๋”˜๊ฐ€์— ์•„์ง ๋‚จ์•„์žˆ๊ณ (๊ทธ๋ฆผ์—์„œ ํ๋ ค์ง), C3'๋Š” main ์œ„์— ์˜ฌ๋ ค ๋†“์€ ๋ณต์‚ฌ๋ณธ์ด๋‹ค. main์ด ์•„์ง ๊ทธ๋Œ€๋กœ๋ผ๋Š” ๋ฌธ์ œ๊ฐ€ ๋‚จ์•„์žˆ๋Š”๋ฐ, ์ด ๋ฌธ์ œ๋Š” ๋‹ค์Œ ๊ณผ์ •์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

git rebase bugfix       # ์„ ํƒ๋œ ๋ธŒ๋žœ์น˜๋ฅผ bugFix ๋ธŒ๋žœ์น˜์ชฝ์œผ๋กœ ๋ฆฌ๋ฒ ์ด์Šคํ•˜๊ธฐ

main์ด  bugFix์˜ ๋ถ€๋ชจ์ชฝ์— ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋‹จ์ˆœํžˆ ๊ทธ ๋ธŒ๋žœ์น˜๋ฅผ ๋” ์•ž์ชฝ์˜ ์ปค๋ฐ‹์„ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ์ด๋™ํ•˜๊ฒŒ ๋œ๋‹ค.

 

BELATED ARTICLES

more