λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
κ°œμΈκ³΅λΆ€/Git & GitHub

[Git & GitHub] 병합(merge) κ°œλ… 및 병합(merge)ν•  λ•Œ λ‚˜νƒ€λ‚˜λŠ” 상황

by πŸ‡λ°•λ΄‰λ΄‰πŸ‡ 2020. 5. 21.

 

 

 

[Git & GitHub] branch(브랜치)와 checkout(체크아웃) κ°œλ…

[Git & GitHub] checkout을 ν™œμš©ν•΄ μ €μž₯ν•˜μ§€ μ•Šμ€ λ‚΄μš© μ·¨μ†Œν•˜κΈ° [Git & GitHub] 클둠(clone)된 μ €μž₯μ†Œ λ™μž‘ ν™•μΈν•˜κΈ° [Git & GitHub] μ†ŒμŠ€νŠΈλ¦¬ μ„€μΉ˜ 및 클둠 κΈ°λ³Έκ°œλ… [Git & GitHub] GitHub νšŒμ›κ°€μž… 및 계정 생..

onelight-stay.tistory.com

 

λΈŒλžœμΉ˜μ™€ 체크아웃에 λŒ€ν•΄ λ°°μ›Œλ΄€μœΌλ‹ˆ

μ΄λ²ˆμ—” 브랜치둜 인해 κ°ˆλΌμ§„ 가지듀을 ν•©μ³λ³΄λŠ”

병합(merge)에 λŒ€ν•΄μ„œ μ•Œμ•„λ³΄μž.

 

 


 

 

merge

ν•˜λ‚˜μ˜ 브랜치λ₯Ό ν˜„μž¬ λΈŒλžœμΉ˜μ™€ ν•©μΉ˜λŠ” 것

 

ν˜„μž¬ λΈŒλžœμΉ˜μ™€ ν•˜λ‚˜μ˜ λΈŒλžœμΉ˜κ°€ 병합될 경우

ν•˜λ‚˜μ˜ 브랜치의 λ‚΄μš©μ΄ ν˜„μž¬ λΈŒλžœμΉ˜μ— λ°˜μ˜λœλ‹€.

 

 


 

 

병합에 κ΄€ν•΄μ„œ λ§‰μ—°νžˆ λ°°μš°λŠ” 것보닀

직접 ν•΄λ³΄λŠ” 게 μ΄ν•΄ν•˜κΈ° μ’‹μœΌλ‹ˆ

ν•΄λ‹Ή μ‚¬μ΄νŠΈλ₯Ό μ΄μš©ν•˜λŠ” κ±Έ ꢌμž₯ν•œλ‹€.

 

 

Learn Git Branching

An interactive Git visualization tool to educate and challenge!

learngitbranching.js.org

 

λ“€μ–΄κ°€λ©΄ μ΄λ ‡κ²Œ λ‚˜μ˜€λŠ”λ° λ§Œμ•½ ν•΄λ‹Ή μ‚¬μ΄νŠΈμ—μ„œ κ°€λ₯΄μ³μ£ΌλŠ” 방법을 μ•Œκ³  μ‹Άλ‹€λ©΄ μ„€λͺ…을 λ“£κ³  가도 μ’‹λ‹€.

 

상관없이 λ°”λ‘œ 끄고 μ‹Άλ‹€λ©΄ λΉ¨κ°„ λ²„νŠΌμ„ λˆ„λ₯Έ 뒀에 ESCν‚€λ₯Ό λˆ„λ₯΄λ©΄ λœλ‹€.

 

 

λ“€μ–΄κ°€λ©΄ 해당창이 보인닀.

 

 

$ reset //λ‚΄μš© μ΄ˆκΈ°ν™”

$ clear //ν™”λ©΄ μ΄ˆκΈ°ν™”

μ‹œμž‘ν•˜κΈ° 전에 reset을 λ¨Όμ € μž…λ ₯ ν›„ μ—”ν„°

clear μž…λ ₯ν›„ μ—”ν„° ν•΄μ€€λ‹€.

 

자 이제 μ‹œμž‘ν•΄λ³΄μž.

 

 


 

 

< 상황1 >

ν—€λ“œ λΈŒλžœμΉ˜μ— 변경사항이 없을 경우 :

 

β‘  ν•©μΉ˜λ €λŠ” λΈŒλžœμΉ˜κ°€ ν—€λ“œ λΈŒλžœμΉ˜λ‘œλΆ€ν„° μ‹œμž‘λ˜μ—ˆλ‹€.

 

β‘‘ ν—€λ“œ λΈŒλžœμΉ˜μ— κ°±μ‹  사항이 μ—†λ‹€.

 

 

$ git commit

$ git branch version2

$ git checkout version2

$ git commit

$ git commit

 

ν•΄λ‹Ή 그림은 ν—€λ“œ 브랜치(ν—€λ“œ λΈŒλžœμΉ˜μ—” *이 λΆ™μ–΄μžˆλ‹€)인

masterμ—μ„œ version2κ°€ 브랜치 되고 두 번 컀밋이 된 μƒνƒœμ΄λ‹€.

 

이 경우 병합을 ν•˜κ²Œλ˜λ©΄

master λΈŒλžœμΉ˜κ°€ κ°€λ¦¬ν‚€λŠ” 컀밋이 version 2의 μ»€λ°‹μœΌλ‘œ μ΄λ™ν•˜κ²Œ λœλ‹€.

 

 

$ git merge version2

ν•΄λ‹Ή 경우λ₯Ό μ†μ „μ†κ²°λ‘œ 일어났닀고 ν•΄μ„œ

fast-forward merge라고 ν•œλ‹€.

 

 


 

 

< 상황 2 >

가지가 μƒκ²¨λ‚œ 경우 :

 

β‘  과거의 μ»€λ°‹μœΌλ‘œλΆ€ν„° 브랜치λ₯Ό μƒμ„±ν•΄μ„œ μž‘μ—…μ„ ν–ˆλ‹€.

 

β‘‘ μƒˆλ‘œμš΄ 브랜치 μž‘μ—… 이후에 ν—€λ“œ λΈŒλžœμΉ˜μ— λ‹€λ₯Έ μƒˆ 컀밋이 λ°œμƒν–ˆλ‹€.

 

β‘’ μ—¬λŸ¬ 브랜치λ₯Ό λ™μ‹œμ— μž‘μ—…ν•˜λ©΄μ„œ 병합을 μ‹œλ„ν–ˆλ‹€.

 

 

$ git commit

$ git branch version2

$ git checkout version2

$ git commit

$ git commit

$ git checkout master

$ git branch version3

$ git checkout version3

$ git commit

$ git commit

$ git checkout master

 

 

$ git checkout master

$ git merge version3

master브랜치둜 체크아웃 ν›„

version3을 λ¨Όμ € λ³‘ν•©ν•œ ν›„ version 2λ₯Ό λ³‘ν•©ν•˜κ²Œ λ˜λŠ”λ°

좩돌이 λ°œμƒν•  κ°€λŠ₯성이 μžˆλ‹€.

 

κ·Έλž˜μ„œ ν•΄λ‹Ή λ‚΄μš©μ„ μˆ˜λ™μœΌλ‘œ μˆ˜μ •ν•΄μ•Ό ν•  κ²½μš°λ„ λ°œμƒν•  수 μžˆλ‹€.

 

이제 μ†ŒμŠ€ 트리둜 상황듀을 직접 λ§ˆμ£Όν•΄ 보자.

 

 


 

 

β‘  같은 νŒŒμΌμ— 각자 κ°±μ‹ λœ 브랜치의 λ‚΄μš© ν•©μΉ˜κΈ°

 

 

 

(1) μ’ŒμΈ‘μ— version 2둜 λ˜μ–΄μžˆλŠ” 브랜치λ₯Ό master둜 클릭해 체크아웃해쀀닀.

 

 

(2) κ°€μž₯ μœ„μ— μžˆλŠ” version 2λ₯Ό 눌러 병합을 ν•΄μ€€λ‹€.

 

 

(3) 병합을 ν΄λ¦­ν•œ ν›„μ—” 좩돌둜 인해

병합이 μ‹€νŒ¨ν•˜κ³  hello.md νŒŒμΌμ— λŠλ‚Œν‘œκ°€ λœ¬λ‹€.

 

에디터에 λ“€μ–΄κ°€ ν™•μΈν•΄λ³΄μž.

 

 

(4) ν•΄λ‹Ή 였λ₯˜κ°€ λ°œμƒν•˜λŠ” μ΄μœ λŠ”

version2 브랜치λ₯Ό λ§Œλ“  이후에 κΈ°μ‘΄ masterλΈŒλžœμΉ˜μ—μ„œ λ‚΄μš©μ„ κ°±μ‹ ν•˜κ³ 

version2 브랜치 λ˜ν•œ λ‚΄μš©μ΄ λ”°λ‘œ μž‘μ„±λ˜μ–΄ λ³‘ν•©ν•˜λŠ”λ° 좩돌이 λ°œμƒν•œ 것이닀.

 

 

(5) λ§Œμ•½, 두 개의 λ‚΄μš©μ„ 같이 κ³΅μ‘΄ν•˜κΈ°λ₯Ό μ›ν•œλ‹€λ©΄

μˆ˜λ™μœΌλ‘œ 직접 μ§€μ›Œμ„œ ν•΄κ²°ν•΄ 쀄 수 μžˆλ‹€.

 

 

(6) 이제 μ†ŒμŠ€ νŠΈλ¦¬μ— λ‹€μ‹œ λ“€μ–΄κ°€ μŠ€ν…Œμ΄μ§€μ— 올린 ν›„ 컀밋을 달아쀀닀.

(μ—¬μ „νžˆ λŠλ‚Œν‘œμ΄μ§€λ§Œ κ·Έ μƒνƒœλ‘œ μŠ€ν…Œμ΄μ§€μ— μ˜¬λ €μ€€λ‹€.)

 

 

(7) 이후에 병합에 μ„±κ³΅ν•˜κ³  κ·ΈλŒ€λ‘œ push ν•΄μ£Όλ©΄ λœλ‹€.

 

μ΄λ•Œ, version 2 λΈŒλžœμΉ˜λŠ” μ§€μ›Œλ„ 상관없닀.

 

μ§€μš΄λ‹€κ³  ν•΄μ„œ λ‚΄μš©μ΄ μ§€μ›Œμ§€κ±°λ‚˜ λ³€λ™λ˜λŠ” 건 μ—†λ‹€.

 

 


 

 

β‘‘ fast-forward merge

 

 

 

(1) λ¨Όμ € master 브랜치만 μžˆλŠ” μƒνƒœμ—μ„œ version3을 λ§Œλ“€μ–΄ μ€€λ‹€.

 

version3 브랜치인 μƒνƒœλ‘œ μž‘μ—…μ„ ν•΄μ€€λ‹€.

 

 

(2) ν•΄λ‹Ή λ‚΄μš©μ„ μž…λ ₯ ν›„ 컀밋해쀀닀.

 

 

(3) version3κ°€ master보닀 더 μ•žμ„œ μžˆλŠ” 것을 확인할 수 μžˆλ‹€.

 

λ‹€μ‹œ ν—€λ“œ 브랜치(master)둜 μ΄λ™ν•œ λ‹€μŒ 버전 3κ³Ό 병합을 ν•΄μ€€λ‹€.

 

 

(4) 그러면 masterκ°€ version3 μœ„μΉ˜μ— μ˜¬λΌκ°€λ©΄μ„œ 병합에 μ„±κ³΅ν•œλ‹€.

 

μ΄λ ‡κ²Œ ν—€λ“œ 브랜치λ₯Ό μˆ˜μ •ν•˜μ§€ μ•Šκ³  λ³‘ν•©ν•œ 이 경우λ₯Ό

fast-forward라고 ν•œλ‹€.

(이후에 ν‘Έμ‹œν•΄μ£Όλ©΄ λœλ‹€.)

 

 


 

 

β‘’ 각 λΈŒλžœμΉ˜μ— λ‹€λ₯Έ 파일의 λ‚΄μš© κ°±μ‹  ν›„ 좩돌 없이 λ³‘ν•©ν•˜κΈ°

 

 

(1) 좩돌이 λ‚˜μ§€ μ•ŠλŠ” 경우λ₯Ό λ§Œλ“€μ–΄ 보자면

version3와 masterκ°€ μžˆλŠ” 컀밋에 version4 브랜치λ₯Ό λ§Œλ“€μ–΄ μ€€λ‹€.

(ν•΄λ“œ 브랜치 masterμ—μ„œ λ§Œλ“€μ–΄μ€€λ‹€.)

 

 

(2) 브랜치λ₯Ό version4둜 μ„€μ •ν•΄ μ€€ λ’€

μ—λ””ν„°μ—μ„œ λ‚΄μš©μ„ μΆ”κ°€ν•˜κ³  컀밋해쀀닀.

 

 

(3) version4κ°€ μ•žμ„œ λ‚˜κ°€ μžˆλŠ” κ±Έ 확인할 수 μžˆλŠ”λ°,

μ΄μƒνƒœμ—μ„œ version3둜 체크아웃을 ν•΄μ€€λ‹€.

 

 

(4) κΈ°μ‘΄ hello.md파일이 μ•„λ‹Œ μƒˆλ‘œμš΄ νŒŒμΌμ„ μ œμž‘ν•΄ λ‚΄μš©μ„ μž…λ ₯ν•˜κ³ ,

컀밋해쀀닀.

(version3.md라고 파일 이름을 μ§€μ •ν•˜κ² λ‹€.)

 

 

(5) 이제 master 브랜치둜 체크아웃해쀀 ν›„

version4 → version3 순으둜 병합해쀀닀.

 

 

(6) masterμ—μ„œ version4λ₯Ό λ³‘ν•©ν•΄μ£ΌλŠ” 건 κ·Έλž˜ν”„μ—μ„œ μ•Œ 수 μžˆλ“―μ΄

ν•˜λ‚˜λ‘œ μ—°κ²°λ˜μ–΄μžˆλŠ” fast-forward이기 λ•Œλ¬Έμ— μ‰½κ²Œ 병합이 λœλ‹€.

 

κ·Έ ν›„ version3을 병합할 λ•Œμ—λŠ” κ·Έλž˜ν”„λ₯Ό 보면

fast-forwardλŠ” μ•„λ‹ˆμ§€λ§Œ version3κ°€ λ‹€λ₯Έ νŒŒμΌμ—μ„œ λ‚΄μš©μ„ μž‘μ„±ν–ˆκΈ° λ•Œλ¬Έμ—

master와 좩돌 없이 병합이 κ°€λŠ₯ν•˜λ‹€.

 

이제 push ν•  일만 λ‚¨μ•˜λ‹€.

 

 


 

 

λ³‘ν•©μ΄λΌλŠ” 게 λ‹¨μˆœνžˆ ν•©μΉœλ‹€κ³ λ§Œ μƒκ°ν–ˆλŠ”λ°

생각보닀 ꡬ체적이고 μœ ν˜•μ΄ λ§Žμ€ 것 κ°™λ‹€.

 

많이 많이 λ³΅μŠ΅ν•˜μž.

 

 


 

 

< μ°Έκ³  >

 

μΈν”„λŸ° - gitκ³Ό github

https://www.inflearn.com/course/git-and-github

 

gitκ³Ό github - μΈν”„λŸ°

ν˜•μƒ 관리 μ‹œμŠ€ν…œ(Verson Control System) 의 ν•œ μ’…λ₯˜μž…λ‹ˆλ‹€. 주둜 κ°œλ°œμžλ“€μ΄ ν”„λ‘œκ·Έλž¨κ³Ό κ΄€λ ¨λœ νŒŒμΌλ“€μ„ μ €μž₯ν•˜λŠ” 데 μ‚¬μš©ν•©λ‹ˆλ‹€. μž…λ¬Έ 개발 도ꡬ λ²„μ „κ΄€λ¦¬μ‹œμŠ€ν…œ κΉƒ(GIT) 온라인 κ°•μ˜ github

www.inflearn.com

 

β€» ν•΄λ‹Ή 글은 μŠ΅λ“ λͺ©μ μœΌλ‘œ μž‘μ„±λœ κΈ€μž…λ‹ˆλ‹€ β€»

 

λ°˜μ‘ν˜•

λŒ“κΈ€