πŸ“ Front-End/Git&Github

[Git] μ—¬λŸ¬ 개의 κΉƒ 컀밋 ν•œλ²ˆμ— μˆ˜μ •ν•˜κΈ°

Sun A 2024. 10. 31. 23:41

μ„œλ‘ 

μ›λž˜λŠ” κ°œλ°œν•  λ•Œ git commit -> push origin λ₯Ό λ°˜λ³΅ν•˜λ©΄μ„œ 계속 pushν–ˆλŠ”λ° 컀밋을 μˆ˜μ •ν•˜λŠ” 것이 λ‚œκ°ν–ˆλ‹€.

git commit --amendλ₯Ό μ‚¬μš©ν•˜λŠ” 것은 pushν•˜κΈ° μ΄μ „μ˜ μ»€λ°‹λ§Œ κ°€λŠ₯ν–ˆκ³  졜근의 μ»€λ°‹λ§Œ μˆ˜μ •μ΄ κ°€λŠ₯ν•˜λ‹€.

κ·Έλž˜μ„œ λ‚˜λŠ” μ΅œκ·Όμ— pushν•œ 컀밋을 μ‚­μ œν•˜κ³  λ‹€μ‹œ μ»€λ°‹ν•˜λŠ” 방법을 κ³„μ†ν•΄μ„œ μ΄μš©ν–ˆλ‹€.

μ•„λ§ˆ 컀밋을 ν•˜κ³  ν•œλ²ˆμ— pushν•˜λŠ” 방법이 쒋은지 컀밋을 ν•˜κ³  ν‘Έμ‹œλ₯Ό λ°”λ‘œλ°”λ‘œ ν•˜λŠ” 방법이 쒋은지에 λŒ€ν•œ νŒλ‹¨μ΄ μ„œμ§€ μ•Šμ•„μ„œ κ·Έλƒ₯ μ²˜μŒμ— μ•Œκ²Œ 된 λ°©λ²•λŒ€λ‘œ 컀밋 -> ν‘Έμ‹œλ₯Ό λ°˜λ³΅ν•˜λ‹€λ³΄λ‹ˆ 졜근 push commit μ‚­μ œ -> λ‹€μ‹œ commit -> λ‹€μ‹œ push 의 λ°˜λ³΅μ΄μ—ˆλ‹€.

μ—¬κΈ°μ„œ ν˜Ήμ‹œ μ΅œκ·Όμ— pushν•œ commit을 μ‚­μ œν•˜λŠ” λͺ…λ Ήμ–΄λŠ” μ•„λž˜μ™€ κ°™λ‹€.

git rebase HEAD^

근데 μ΅œκ·Όμ— κΈ°λŠ₯ κ΅¬ν˜„μ—μ„œ 컀밋을 ν•˜λ‹€κ°€ 컀밋 λ©”μ‹œμ§€μ— <scope>κΉŒμ§€ ν¬ν•¨ν•΄μ„œ 적고 μžˆμ—ˆλŠ”λ°

폴더λͺ…은 κ·Έλƒ₯ (utils)둜 μž‘μ„±ν•΄λ„ λ˜λŠ”λ° νŒŒμΌμ€ ν™•μž₯자λͺ…을 κΌ­ μž‘μ„±ν•΄μ•Ό ν•˜λ‚˜? ν•˜λŠ” 의문이 λ“€μ—ˆλ‹€. 근데 ν˜„μž¬ λ‚΄κ°€ μž‘μ„±ν•˜λŠ” νŒŒμΌμ—μ„œλŠ” .js ν™•μž₯자 밖에 μ—†κΈ° λ•Œλ¬Έμ— μƒλž΅ν•˜λŠ” 것이 깔끔할 것 κ°™λ‹€.

근데 λ§Œμ•½μ— .js λ₯Ό λΆ™μ΄λŠ” 게 λ‚˜μ€ 상황인데 "λͺ¨λ“  컀밋에 ν™•μž₯자λͺ…을 λΆ™μ—¬μ£Όμ§€ μ•Šμ•˜λ‹€λ©΄ ν•œλ²ˆμ— μ–΄λ–»κ²Œ μˆ˜μ •ν•˜μ§€?" ν•˜λŠ” ꢁ금증이 μƒκ²¨μ„œ μ•Œκ²Œ 된 방법이닀.

μ•„λ§ˆ μ•žμœΌλ‘œλ„ 컀밋 λ©”μ‹œμ§€λ₯Ό μˆ˜μ •ν•  λ•Œ 자주 μ‚¬μš©ν•  것 κ°™λ‹€.

 

λ³Έλ‘ 

μš°μ„  λ‚΄κ°€ μž‘μ„±ν•œ κΉƒ 컀밋이 무엇이 μžˆλŠ”μ§€, λͺ‡ κ°œκ°€ μžˆλŠ” μ§€ 확인해야 ν•œλ‹€.

git log --oneline

μ΄λ ‡κ²Œ μž…λ ₯ν•˜λ©΄ μ»€λ°‹μ˜ κ°―μˆ˜μ™€ μ–΄λ–€ 컀밋을 ν–ˆλŠ”μ§€ 기둝을 확인할 수 μžˆλ‹€.

κ°€μž₯ 졜근의 컀밋이 μ΅œμƒλ‹¨μ— λ‚˜νƒ€λ‚˜μžˆλŠ” λ‚΄λ¦Όμ°¨μˆœ ν˜•μ‹μ΄λ‹€.

μ—¬κΈ°μ„œ λ§Œμ•½ 0006384의 컀밋 λ©”μ‹œμ§€λ₯Ό μˆ˜μ •ν•˜κ³  μ‹Άλ‹€λ©΄ μœ„μ—μ„œλΆ€ν„° 갯수λ₯Ό μ„Έλ©΄ λœλ‹€.

졜근 μ»€λ°‹μ—μ„œ 3λ²ˆμ§Έμ— 있기 λ•Œλ¬Έμ— git rebase -i HEAD~3을 μž…λ ₯ν•˜λ©΄ λœλ‹€.

그럼 μ•„λž˜μ™€ 같은 화면이 λ‚˜μ˜¨λ‹€.

μ—¬κΈ°μ„œ pick 뢀뢄은 컀밋 λ©”μ‹œμ§€λ₯Ό μˆ˜μ •ν•˜μ§€ μ•Šκ³  κ³ μ •ν•΄λ‘κ² λ‹€λŠ” 의미이고 μˆ˜μ •ν•˜κ³  싢은 컀밋 λ©”μ‹œμ§€λŠ” pick을 μ§€μš°κ³  edit을 적어쀀닀.

* μ—¬κΈ°μ„œ ν—·κ°ˆλ¦¬μ§€ 말아야 ν•  뢀뢄은 onelineκ³Ό λ°˜λŒ€λ‘œ κ°€μž₯ 였래된 컀밋 λ©”μ‹œμ§€κ°€ μ΅œμƒλ‹¨μ— λ¨Όμ € λœ¬λ‹€.

이제 edit으둜 λ°”κΎΌ 컀밋 λ©”μ‹œμ§€μ˜ κΈ€μžλ₯Ό λ³€κ²½ν•˜κ³  Ctrl + Xλ₯Ό λˆ„λ₯΄λ©΄ μ•„λž˜μ™€ 같은 λ©”μ‹œμ§€κ°€ λœ¬λ‹€.

μ—¬κΈ°μ„œ μˆ˜μ •μ„ μ›ν•˜λ©΄ Yν‚€λ₯Ό λˆ„λ₯΄κ³  Enterλ₯Ό λˆ„λ₯΄κ³  λ‚˜μ˜¨λ‹€.

그럼 λ°”λ‘œ μˆ˜μ •λ˜λŠ” 것이 μ•„λ‹ˆλΌ μ•„λž˜μ™€ 같은 문ꡬ가 λœ¬λ‹€.

μ—¬κΈ°μ„œ git commit --amendλ₯Ό μž…λ ₯ν•΄μ£Όμ§€ μ•ŠμœΌλ©΄ μˆ˜μ •λ˜μ§€ μ•ŠμœΌλ‹ˆ κΌ­ amendλ₯Ό μž…λ ₯ν•΄μ•Ό ν•œλ‹€.

μž…λ ₯ν•˜λ©΄ μ•„λž˜μ™€ 같은 창으둜 λ‹€μ‹œ μ ‘μ†ν•˜κ²Œ λœλ‹€.

μ°¨λ‘€λŒ€λ‘œ edit 을 μ μ—ˆλ˜ 컀밋을 μˆ˜μ •ν•  수 μžˆλ‹€.

μ—¬κΈ°μ„œ λ‹€μ‹œ Ctrl + Xλ₯Ό λˆ„λ₯΄κ³  Yλ₯Ό μž…λ ₯ν•œ ν›„ Enterλ₯Ό λˆ„λ₯΄λ©΄ λ‹€μ‹œ λ°–μœΌλ‘œ λ‚˜μ˜€λŠ”λ° μ΄λ•ŒλŠ” μˆ˜μ •μ΄ μ™„λ£Œ λ˜μ–΄μžˆλ‹€.

μ—¬κΈ°μ„œ git rebase --continueλ₯Ό μž…λ ₯ν•΄μ£Όλ©΄ μˆ˜μ •μ΄ μ™„λ£Œλœλ‹€!

 

κ²°λ‘ 

μ—¬λŸ¬ 개의 컀밋을 ν•œλ²ˆμ— μˆ˜μ •ν•˜κ³  싢을 λ•Œ 맀우 μœ μš©ν•  것 κ°™λ‹€. μ•„λ§ˆ κΈ°λŠ₯이 λ§Žμ•„μ„œ 컀밋 λ©”μ‹œμ§€ μˆ˜μ • 뿐만 μ•„λ‹ˆλΌ μ½”λ“œλ„ μˆ˜μ •μ΄ κ°€λŠ₯ν•  κ²ƒμœΌλ‘œ μƒκ°λœλ‹€! μ»€λ°‹μ˜ μ½”λ“œλ₯Ό μˆ˜μ •ν•˜κ³  μ‹Άμ„λ•Œ ν•œλ²ˆ 더 μ‚¬μš©ν•΄λ΄μ•Ό ν•  것 κ°™λ‹€

μš°μ„  λ‹€μŒ κΈ°λŠ₯ κ΅¬ν˜„μ„ ν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— rebase둜 μ½”λ“œλ₯Ό μˆ˜μ •ν•˜λŠ” 것은 λ‹€μŒμ— μ•Œμ•„λ΄μ•Όκ² λ‹€.