λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

Git 브랜치 이해와 관리: ν˜‘μ—…μ˜ 핡심, 브랜치둜 ν”„λ‘œμ νŠΈ 효율적으둜 κ΄€λ¦¬ν•˜κΈ° 🌿

okrestart 2024. 10. 30.

 

Git의 κ°€μž₯ κ°•λ ₯ν•œ κΈ°λŠ₯ 쀑 ν•˜λ‚˜λŠ” λ°”λ‘œ 브랜치(branch) μž…λ‹ˆλ‹€. λΈŒλžœμΉ˜λŠ” ν”„λ‘œμ νŠΈμ˜ 독립적인 μž‘μ—… 곡간을 μ˜λ―Έν•˜λ©°, μ½”λ“œμ˜ μ•ˆμ •μ„±μ„ μœ μ§€ν•˜λ©΄μ„œλ„ μ—¬λŸ¬ κΈ°λŠ₯을 λ™μ‹œμ— κ°œλ°œν•  수 μžˆλ„λ‘ λ„μ™€μ€λ‹ˆλ‹€ . 이번 ν¬μŠ€νŒ…μ—μ„œλŠ” 브랜치의 κ°œλ…κ³Ό ν•„μš”μ„±μ„ μ„€λͺ…ν•˜κ³ , Gitμ—μ„œ 브랜치λ₯Ό 생성, 이동, λ³‘ν•©ν•˜λŠ” 방법을 μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

 

 

1. λΈŒλžœμΉ˜λž€ 무엇인가?

λΈŒλžœμΉ˜λž€ ν•˜λ‚˜μ˜ Git μ €μž₯μ†Œ μ•ˆμ—μ„œ 독립적인 μž‘μ—… 곡간 을 μ˜λ―Έν•©λ‹ˆλ‹€. ν”„λ‘œμ νŠΈλ₯Ό 진행할 λ•Œ, 브랜치λ₯Ό λ‚˜λˆ„μ–΄ μž‘μ—…ν•˜λ©΄ μ½”λ“œκ°€ μ„œλ‘œ μΆ©λŒν•˜μ§€ μ•Šκ³  관리할 수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, 개발 쀑인 κΈ°λŠ₯을 μ™„λ£Œν•˜κΈ° 전에, 이미 μ™„λ£Œλœ μ½”λ“œλ₯Ό λ‹€λ₯Έ μž‘μ—…μ— μ μš©ν•  수 μžˆλŠ” 것이 브랜치의 μž₯μ μž…λ‹ˆλ‹€.

μ™œ λΈŒλžœμΉ˜κ°€ ν•„μš”ν•œκ°€?

브랜치λ₯Ό μ‚¬μš©ν•˜λ©΄, λ‹€μŒκ³Ό 같은 이점이 μžˆμŠ΅λ‹ˆλ‹€.

  • λ™μ‹œμ— μ—¬λŸ¬ κΈ°λŠ₯ 개발 κ°€λŠ₯ : 각 κΈ°λŠ₯을 λ³„λ„μ˜ λΈŒλžœμΉ˜μ—μ„œ μž‘μ—…ν•¨μœΌλ‘œμ¨ μ„œλ‘œ 독립적인 μž‘μ—…μ„ 진행할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ½”λ“œ μ•ˆμ •μ„± 보μž₯ : 메인 λΈŒλžœμΉ˜μ—λŠ” μ•ˆμ •λœ μ½”λ“œλ§Œ μœ μ§€ν•˜λ©΄μ„œ, μƒˆλ‘œμš΄ κΈ°λŠ₯μ΄λ‚˜ 버그 μˆ˜μ •μ„ 별도 λΈŒλžœμΉ˜μ—μ„œ ν…ŒμŠ€νŠΈν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • 병합을 ν†΅ν•œ ν˜‘μ—… : 각 브랜치λ₯Ό λ³‘ν•©ν•¨μœΌλ‘œμ¨ μ΅œμ’…μ μΈ μ½”λ“œλ‘œ 톡합할 수 μžˆμ–΄ ν˜‘μ—…μ— 맀우 μœ λ¦¬ν•©λ‹ˆλ‹€.

 

2. git branch둜 브랜치 생성 및 μ‚­μ œν•˜κΈ°

Gitμ—μ„œλŠ” git branch λͺ…λ Ήμ–΄λ₯Ό 톡해 브랜치λ₯Ό μƒμ„±ν•˜κ³  μ‚­μ œν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λ•Œ, μƒˆλ‘œμš΄ κΈ°λŠ₯μ΄λ‚˜ 버그 μˆ˜μ •μ„ μœ„ν•œ 브랜치λ₯Ό λ§Œλ“€μ–΄ μž‘μ—…μ„ 뢄리할 수 μžˆμŠ΅λ‹ˆλ‹€.

브랜치 μƒμ„±ν•˜κΈ°

git branch <브랜치λͺ…>

μœ„ λͺ…λ Ήμ–΄λŠ” ν˜„μž¬ μœ„μΉ˜ν•œ 브랜치의 볡사본 을 μƒμ„±ν•˜μ—¬ μƒˆλ‘œμš΄ 브랜치λ₯Ό λ§Œλ“­λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ git branch feature-UI λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•˜λ©΄ feature-UI λΌλŠ” μ΄λ¦„μ˜ μƒˆ λΈŒλžœμΉ˜κ°€ μƒμ„±λ©λ‹ˆλ‹€.

브랜치 μ‚­μ œν•˜κΈ°

μ™„λ£Œλœ μž‘μ—…μ„ λ³‘ν•©ν•œ ν›„, 더 이상 ν•„μš”ν•˜μ§€ μ•Šμ€ 브랜치λ₯Ό μ‚­μ œν•  λ•ŒλŠ” λ‹€μŒ λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

git branch -d <브랜치λͺ…>
  • -d μ˜΅μ…˜μ„ μ‚¬μš©ν•˜μ—¬ λ³‘ν•©λœ 브랜치만 μ‚­μ œ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ³‘ν•©λ˜μ§€ μ•Šμ€ 브랜치λ₯Ό μ‚­μ œν•˜λ €λ©΄ -D μ˜΅μ…˜μ„ μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

브랜치 λͺ…λ Ήμ–΄ μš”μ•½

λͺ…λ Ήμ–΄ μ„€λͺ… μ˜ˆμ‹œ
git branch <브랜치λͺ…> μƒˆλ‘œμš΄ 브랜치λ₯Ό 생성 git branch feature-UI
git branch -d <브랜치λͺ…> λ³‘ν•©λœ 브랜치λ₯Ό μ‚­μ œ git branch -d feature-UI
git branch -D <브랜치λͺ…> κ°•μ œλ‘œ 브랜치λ₯Ό μ‚­μ œ git branch -D feature-UI

 

 

3. git checkout κ³Ό git switch 둜 브랜치 μ΄λ™ν•˜κΈ°

브랜치λ₯Ό μƒμ„±ν•œ ν›„μ—λŠ” ν•΄λ‹Ή 브랜치둜 μ΄λ™ν•˜μ—¬ μž‘μ—…μ„ 진행해야 ν•©λ‹ˆλ‹€. Gitμ—μ„œλŠ” git checkout λ˜λŠ” git switch λͺ…λ Ήμ–΄λ‘œ 브랜치λ₯Ό μ „ν™˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

git checkout 으둜 브랜치 μ΄λ™ν•˜κΈ°

git checkout <브랜치λͺ…>

μœ„ λͺ…λ Ήμ–΄λŠ” μ§€μ •ν•œ 브랜치둜 μ΄λ™ν•˜μ—¬ ν•΄λ‹Ή 브랜치의 파일과 μƒνƒœλ₯Ό λΆˆλŸ¬μ˜΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, git checkout feature-UI 둜 μ΄λ™ν•˜λ©΄ feature-UI λΈŒλžœμΉ˜μ—μ„œ μž‘μ—…ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Tip : 졜근 Git λ²„μ „μ—μ„œλŠ” git switch λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•˜μ—¬ 브랜치 이동이 κ°€λŠ₯ν•©λ‹ˆλ‹€. μ‚¬μš© 방법은 λ™μΌν•©λ‹ˆλ‹€.

git switch <브랜치λͺ…>

브랜치 생성과 λ™μ‹œμ— μ΄λ™ν•˜κΈ°

브랜치λ₯Ό μƒμ„±ν•˜λ©΄μ„œ λ°”λ‘œ μ΄λ™ν•˜κ³  μ‹Άλ‹€λ©΄ -b μ˜΅μ…˜μ„ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

git checkout -b <브랜치λͺ…>

μœ„ λͺ…λ Ήμ–΄λŠ” 브랜치λ₯Ό μƒμ„±ν•˜κ³ , μžλ™μœΌλ‘œ μƒμ„±λœ 브랜치둜 μ΄λ™μ‹œμΌœ μ€λ‹ˆλ‹€.

 

4. git merge 둜 브랜치 λ³‘ν•©ν•˜κΈ°

μž‘μ—…μ„ μ™„λ£Œν•œ ν›„, λ‹€λ₯Έ λΈŒλžœμΉ˜μ™€ λ³€κ²½ 사항을 ν†΅ν•©ν•˜λ €λ©΄ git merge λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. 주둜 메인 브랜치(main) 에 개발이 μ™„λ£Œλœ 브랜치λ₯Ό λ³‘ν•©ν•˜μ—¬ μ΅œμ’… μ½”λ“œλ₯Ό κ΅¬μ„±ν•©λ‹ˆλ‹€.

git merge μ‚¬μš© μ˜ˆμ‹œ

  1. 메인 브랜치둜 이동 : 병합을 μ§„ν–‰ν•˜λ €λ©΄ 병합할 λŒ€μƒ 브랜치둜 이동해야 ν•©λ‹ˆλ‹€.

bash git checkout main

  1. 병합 μ‹€ν–‰ : 병합할 브랜치λ₯Ό μ§€μ •ν•˜μ—¬ git merge λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€.

bash git merge <브랜치λͺ…>

예λ₯Ό λ“€μ–΄, git merge feature-UI λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•˜λ©΄ feature-UI 브랜치의 λ³€κ²½ 사항이 main 브랜치 에 λ³‘ν•©λ©λ‹ˆλ‹€.

병합 좩돌 ν•΄κ²°ν•˜κΈ°

병합 κ³Όμ •μ—μ„œ λ™μΌν•œ 파일이 λ‹€λ₯Έ λΈŒλžœμΉ˜μ—μ„œ μˆ˜μ •λ˜λ©΄ 좩돌(conflict) 이 λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. Git은 좩돌 λ°œμƒ μ‹œ 좩돌 νŒŒμΌμ„ ν‘œμ‹œν•˜λ©°, μ‚¬μš©μžκ°€ 직접 μΆ©λŒμ„ ν•΄κ²°ν•˜λ„λ‘ ν•©λ‹ˆλ‹€. μΆ©λŒμ„ ν•΄κ²°ν•œ ν›„ λ‹€μŒκ³Ό 같이 병합을 μ™„λ£Œν•  수 μžˆμŠ΅λ‹ˆλ‹€.

git add <파일λͺ…>
git commit -m "좩돌 ν•΄κ²°"

이둜써 병합 μΆ©λŒμ„ ν•΄κ²°ν•˜κ³  병합을 μ™„λ£Œν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

브랜치 μ‚¬μš© νŠΈλ Œλ“œ πŸ“Š

ν˜„μž¬ GitHub와 GitLab λ“±μ˜ ν”Œλž«νΌμ—μ„œ 브랜치λ₯Ό ν™œμš©ν•œ ν˜‘μ—… 은 ν‘œμ€€μœΌλ‘œ 자리 작고 μžˆμŠ΅λ‹ˆλ‹€. 쑰사에 λ”°λ₯΄λ©΄ Git μ‚¬μš©μžμ˜ μ•½ 80% 이상이 브랜치λ₯Ό μ‚¬μš©ν•˜μ—¬ ν”„λ‘œμ νŠΈμ˜ κΈ°λŠ₯별 뢄리와 관리에 ν™œμš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 특히, κΈ°λŠ₯별 λΈŒλžœμΉ˜μ™€ Pull Request(PR)λ₯Ό ν™œμš©ν•œ ν˜‘μ—… 방식은 λ§Žμ€ κΈ°μ—…μ—μ„œ μ• μš©λ˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

 


 

FAQ πŸ€”

Q1. 브랜치 이름은 μ–΄λ–€ κ·œμΉ™μ„ λ”°λ₯΄λŠ” 것이 μ’‹λ‚˜μš”?
A1. 브랜치 이름은 μ΄ν•΄ν•˜κΈ° 쉽도둝 κΈ°λŠ₯μ΄λ‚˜ λͺ©μ μ„ 반영 ν•œ 이름을 μ‚¬μš©ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, feature-UI , bugfix-login κ³Ό 같은 ν˜•μ‹μœΌλ‘œ 이름을 μ§“μŠ΅λ‹ˆλ‹€.

Q2. git checkout κ³Ό git switch 의 μ°¨μ΄λŠ” λ¬΄μ—‡μΈκ°€μš”?
A2. κΈ°λŠ₯은 λ™μΌν•˜μ§€λ§Œ, git switch λŠ” 브랜치 이동을 μœ„ν•΄ μƒˆλ‘­κ²Œ μΆ”κ°€λœ λͺ…λ Ήμ–΄ μž…λ‹ˆλ‹€. Git의 직관성을 높이기 μœ„ν•΄ λ„μž…λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

Q3. 병합 후에 κΈ°μ‘΄ λΈŒλžœμΉ˜λŠ” μ‚­μ œν•΄λ„ λ˜λ‚˜μš”?
A3. λ„€, 병합이 μ™„λ£Œλœ λΈŒλžœμΉ˜λŠ” μ‚­μ œν•΄λ„ λ¬΄λ°©ν•©λ‹ˆλ‹€. μž‘μ—… 곡간이 깔끔해지며, Git 이λ ₯μ—λŠ” 기둝이 남기 λ•Œλ¬Έμ— μ‚­μ œν•΄λ„ μ•ˆμ „ν•©λ‹ˆλ‹€.

Q4. 좩돌 해결이 μ–΄λ €μšΈ λ•ŒλŠ” μ–΄λ–»κ²Œ ν•˜λ‚˜μš”?
A4. Git은 좩돌 μœ„μΉ˜λ₯Ό ν‘œμ‹œν•΄μ£Όλ―€λ‘œ, 좩돌이 λ°œμƒν•œ νŒŒμΌμ„ μ—΄μ–΄ μˆ˜λ™μœΌλ‘œ μˆ˜μ •ν•œ ν›„ 컀밋 ν•˜λ©΄ λ©λ‹ˆλ‹€. ν•„μš” μ‹œ, ν˜‘μ—… νŒ€μ›κ³Ό μƒμ˜ν•˜μ—¬ ν•΄κ²°ν•˜μ„Έμš”.

Q5. λͺ¨λ“  파일이 μ•„λ‹Œ 일뢀 파일만 병합할 수 μžˆλ‚˜μš”?
A5. git cherry-pick 을 톡해 νŠΉμ • μ»€λ°‹λ§Œ μ„ νƒν•˜μ—¬ 병합할 수 μžˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ κΈ°λ³Έ 병합 λ°©μ‹μ—μ„œλŠ” 전체 νŒŒμΌμ„ λ³‘ν•©ν•˜κ²Œ λ©λ‹ˆλ‹€.

이제 Git의 브랜치 κΈ°λŠ₯을 톡해 ν”„λ‘œμ νŠΈλ₯Ό 더 μ²΄κ³„μ μœΌλ‘œ κ΄€λ¦¬ν•΄λ³΄μ„Έμš”! 브랜치λ₯Ό ν™œμš©ν•˜λ©΄ ν˜‘μ—…μ΄ 더 효율적이고 μ•ˆμ •μ μœΌλ‘œ 진행될 수 μžˆμŠ΅λ‹ˆλ‹€.

λŒ“κΈ€