λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
μΉ΄ν…Œκ³ λ¦¬ μ—†μŒ

Git & Github

by solanarey 2023. 10. 18.

Github

clone을 ν•  λ•Œ 맨 끝에 ‘.’ 을 μ•ˆ 뢙이면 μƒˆ 폴더가 μƒμ„±λ˜κ³ , 뢙이면 ν˜„μž¬ 디렉토리 μœ„μΉ˜μ—μ„œ μƒμ„±λœλ‹€.

ex) git clone https://github.com/μ–΄μ©Œκ³ μ €μ©Œκ³ /μ–΄μ©Œκ³ μ €μ©Œκ³  .

λ ˆν¬μ§€ν† λ¦¬ νŽ˜μ΄μ§€ → settings → Manage access → invite a collaborator → μ΄ˆλŒ€ ν•  μ‚¬μš©μž 이름 κΈ°μž… → μ΄ˆλŒ€ 받은 μ‚¬λžŒμ˜ μ΄λ©”μΌλ‘œ 메일 λ°œμ†‘ → μˆ˜λ½μ„ ν•˜λ©΄ μ™„λ£Œ

Branch

λ§Œμ•½ AλΌλŠ” κ°œλ°œμžμ™€ BλΌλŠ” κ°œλ°œμžκ°€ ν•œ ν”„λ‘œμ νŠΈλ₯Ό 같이 ν˜‘μ—…μ„ μ§„ν–‰ν•œλ‹€κ³  κ°€μ •ν•˜μž.

A와 Bκ°€ μ½”λ“œλ₯Ό μž‘μ„±ν•˜κ³  λ™μ‹œμ— 컀밋을 ν•˜κ²Œ λœλ‹€λ©΄? → 좩돌 λ‚  κ°€λŠ₯성이 λ‹€λΆ„ν•˜λ‹€. (λ˜‘κ°™μ€ μ½”λ“œλ₯Ό λ™μ‹œμ— μˆ˜μ •ν•˜κ³  컀밋을 ν•  경우)

λΈŒλžœμΉ˜λŠ” νŠΉμ • μ»€λ°‹μ—μ„œ κ°€μ§€λ₯Ό μΉ˜λŠ” 것이닀.

  • HEADλΌλŠ” 것은 ν˜„μž¬μ˜ 브랜치λ₯Ό κ°€λ¦¬ν‚€λŠ” 것이닀.
  • ν‰μ†Œ git push origin master λ₯Ό 톡해 ν‘Έμ‹œλ₯Ό ν–ˆμœΌλ©΄ ν˜„μž¬μ˜ HEADλŠ” masterλΌλŠ” λΈŒλžœμΉ˜μ΄λ‹€.

ν˜‘μ—… μ‹œ μœ„μ˜ 상황과 같은 일이 μΌμ–΄λ‚˜ 좩돌이 μΌμ–΄λ‚˜λŠ” 것을 λ°©μ§€ν•˜κΈ° μœ„ν•΄ 브랜치λ₯Ό 생성 ν•œλ‹€

git branch hi
git checkout hi
  • 컀밋 1(master HEAD)
  • Aκ°œλ°œμžμ™€ B개발자 같은 컀밋 μ‹œμ (컀밋 1)μ—μ„œ 각자 브랜치 생성
  • 컀밋 1(master)을 κΈ°μ€€μœΌλ‘œ 두 λΈŒλžœμΉ˜κ°€ 생성됨.
  • Aκ°œλ°œμžλŠ” μžμ‹ μ΄ μƒμ„±ν•œ hiλΌλŠ” 브랜치둜 checkout ν›„ μ½”λ“œλ₯Ό μž‘μ„± 및 μˆ˜μ • ν›„ μž‘μ—…λ‚΄μš© 컀밋 ν›„ push.
  • Bκ°œλ°œμžλŠ” A개발자의 μž‘μ—…λ‚΄μš©μ„ fetch
  • B개발자 λ˜ν•œ 컀밋1(master)μ—μ„œ helloλΌλŠ” 브랜치 생성 ν›„ μ½”λ“œ μž‘μ„± 및 μˆ˜μ • ν›„ μž‘μ—… λ‚΄μš© 컀밋 ν›„ push

Merge

이제 Aκ°œλ°œμžμ™€ Bκ°œλ°œμžκ°€ 각자의 λΈŒλžœμΉ˜μ—μ„œ μž‘μ—…ν•œ λ‚΄μš©μ„ master 브랜치둜 병합(merge) ν•  λ•Œμ΄λ‹€.

  • Aκ°œλ°œμžκ°€ μžμ‹ μ˜ 브랜치(hi)μ—μ„œ git checkout master λͺ…λ Ήμ–΄λ₯Ό 톡해 master 브랜치둜 μ΄λ™ν•œλ‹€.
  • 그리고 μžμ‹ μ΄ 생성 ν–ˆμ—ˆλ˜ 브랜치(hi)λ₯Ό 병합(merge) ν•œλ‹€.
  • masterλΈŒλžœμΉ˜μ— hi의 μ΅œμ‹  컀밋이 반영 된 것을 ν™•μΈν•œλ‹€.
  • hi의 컀밋을 master 브랜치둜 push ν•œλ‹€.

conflict

μ»¨ν”Œλ¦­νŠΈλŠ” mergeλ₯Ό ν–ˆμ„ λ•Œ 좩돌이 λ‚¬μ„λ•Œμ΄λ‹€.

λ™μΌν•œ μ½”λ“œμ—μ„œ μž‘μ—…μ„ ν•˜κ³  λ¨Έμ§€ν–ˆμ„ λ•Œ λ°œμƒν•œλ‹€.

이 λ•Œ ν•΄κ²° 방법은 좩돌 λ‚˜λŠ” 두 μ½”λ“œ μ€‘μ—μ„œ ν•˜λ‚˜λ‘œ μˆ˜μ •ν•˜μ—¬μ•Ό ν•œλ‹€.

amend

κΉœλΉ‘ν•˜κ³  μˆ˜μ • λͺ» ν•œ 파일이 μžˆλŠ” μƒνƒœλ‘œ 컀밋을 ν–ˆμ„ λ•Œ μˆ˜μ • ν›„ λ‚΄μš©μ„ 방금 λ§Œλ“  컀밋에 μΆ”κ°€ ν•˜κ³ μ‹Άμ„ λ•Œ ν˜Ήμ€ 컀밋 λ©”μ„Έμ§€λ₯Ό μˆ˜μ •ν•˜κ³  싢을 λ•Œ μ‚¬μš©ν•œλ‹€.

ν•œ 컀밋에 ν•œ κΈ°λŠ₯이 λ“€μ–΄κ°€μ•Ό 버전 관리가 μ›ν™œν•˜κ²Œ 이루어지기 λ•Œλ¬Έμ— 같은 κΈ°λŠ₯μ—μ„œμ˜ μ½”λ“œ μΆ”κ°€ 및 μˆ˜μ •μ΄λΌλ©΄ μ›λž˜ ν–ˆλ˜ μ»€λ°‹μ—μ„œ amendλ₯Ό ν•˜λŠ” 것이 μ’‹λ‹€.

μ£Όμ˜μ‚¬ν•­μœΌλ‘œλŠ” 같은 λΈŒλžœμΉ˜μ—μ„œ 두 λͺ…이 λ™μ‹œμ— 컀밋을 ν•  λ•Œ 이미 적용 된 컀밋에 amendλ₯Ό ν•˜λ©΄ λ™λ£Œμ™€ λ‚˜μ˜ 버전이 꼬일 수 있기 λ•Œλ¬Έμ— λ°˜λ“œμ‹œ 혼자 μžˆλŠ” λΈŒλžœμΉ˜μ—μ„œλ§Œ amendλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

stash

변경사항을 컀밋 ν•˜μ§€ μ•Šκ³  ν‚΅ 해두고 μ‹Άμ„λ•Œ μ‚¬μš©ν•œλ‹€.

reset

μ˜›λ‚  μ»€λ°‹μœΌλ‘œ 브랜치λ₯Ό 되돌리고 싢을 λ•Œ μ‚¬μš©ν•œλ‹€.

reset ν›„ κ·Έλƒ₯ push ν•˜λ©΄ 이미 μ—¬νƒœκΉŒμ§€ push ν•œ 이λ ₯이 있기 λ•Œλ¬Έμ— 였λ₯˜κ°€ λ‚œλ‹€.

κ·Έλž˜μ„œ force(κ°•λ ₯) pushλ₯Ό ν•΄μ•Όν•œλ‹€.

혼자 μ“°λŠ” λΈŒλžœμΉ˜μ—μ„œ μ‚¬μš© ν•  것.

revert

νŠΉμ • μ»€λ°‹μ˜ 변경사항을 λ˜λŒλ €μ€˜μ„œ μƒˆλ‘œμš΄ 컀밋을 λ§Œλ“€μ–΄ μ€€λ‹€.

cherry-pick

μ›ν•˜λŠ” 컀밋 ν•˜λ‚˜λ₯Ό λ–Όμ„œ λ‚΄κ°€ μ›ν•˜λŠ” λΈŒλžœμΉ˜μ— λΆ™μ΄λŠ” 것이닀.