Git ΠΠΎΠ½ΡΡΠΎΠ»Ρ ΠΠ΅ΡΡΠΈΠΉ: ΠΠΎΠ»Π½ΡΠΉ Π’Π΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠΉ Π‘ΠΏΡΠ°Π²ΠΎΡΠ½ΠΈΠΊ Π΄Π»Ρ Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ²
Git β ΡΡΠΎ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π²Π΅ΡΡΠΈΠΉ (DVCS), ΠΊΠΎΡΠΎΡΠ°Ρ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠ½ΠΈΠΌΠΊΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ Π΄Π΅ΡΠ΅Π²Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° Ρ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ Π»ΡΠ±ΠΎΠΌΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Ρ ΡΡΠ°ΡΡΠ½ΠΈΠΊΠΎΠ² ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ, Π½Π΅ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΡΠ²Π°Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π΄ΡΡΠ³ Π΄ΡΡΠ³Π°. ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ Ρ ΡΠ°Π½ΠΈΡ ΠΏΠΎΠ»Π½ΡΡ ΠΊΠΎΠΏΠΈΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ β Π²ΠΊΠ»ΡΡΠ°Ρ Π²ΡΡ ΠΈΡΡΠΎΡΠΈΡ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ² β Π½Π° ΡΠ²ΠΎΡΠΌ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΌ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ΅, ΡΡΠΎ ΠΈΡΠΊΠ»ΡΡΠ°Π΅Ρ Π΅Π΄ΠΈΠ½ΡΡ ΡΠΎΡΠΊΡ ΠΎΡΠΊΠ°Π·Π° ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΡ ΡΠ°Π±ΠΎΡΡ Π² ΠΎΡΠ»Π°ΠΉΠ½-ΡΠ΅ΠΆΠΈΠΌΠ΅.
Π‘ΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΠΠΈΠ½ΡΡΠΎΠΌ Π’ΠΎΡΠ²Π°Π»ΡΠ΄ΡΠΎΠΌ Π² Π°ΠΏΡΠ΅Π»Π΅ 2005 Π³ΠΎΠ΄Π° Π΄Π»Ρ Π·Π°ΠΌΠ΅Π½Ρ BitKeeper Π² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΡΠ΄ΡΠ° Linux, Git Π±ΡΠ» ΡΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ Ρ Π½ΡΠ»Ρ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΡΡΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΡ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ: ΡΠΊΠΎΡΠΎΡΡΡ, ΡΠ΅Π»ΠΎΡΡΠ½ΠΎΡΡΡ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π½Π΅Π»ΠΈΠ½Π΅ΠΉΠ½ΡΡ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΡ ΡΠ°Π±ΠΎΡΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ². ΠΡΠΈ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΡΠΎ, ΡΡΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΈΠ°Π»ΡΠ½ΠΎ ΠΎΡΠ»ΠΈΡΠ°Π΅Ρ Git ΠΎΡ ΠΏΡΠ΅Π΄ΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΈΠΊΠΎΠ², ΠΈ ΠΎΠ±ΡΡΡΠ½ΡΡΡ, ΠΏΠΎΡΠ΅ΠΌΡ ΠΎΠ½ ΠΎΡΡΠ°ΡΡΡΡ Π΄ΠΎΠΌΠΈΠ½ΠΈΡΡΡΡΠ΅ΠΉ VCS ΡΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ Π΄Π²ΡΡ Π΄Π΅ΡΡΡΠΈΠ»Π΅ΡΠΈΠΉ.
Π§Π΅ΠΌ Git ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ ΡΠ΅Π½ΡΡΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π²Π΅ΡΡΠΈΠΉ
ΠΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ Git ΡΡΠ΅Π±ΡΠ΅Ρ ΠΏΡΡΠΌΠΎΠ³ΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΡΠ΅Π½ΡΡΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌΠΈ, ΡΠ°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ Subversion (SVN) ΠΈΠ»ΠΈ CVS, Π³Π΄Π΅ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ Π°Π²ΡΠΎΡΠΈΡΠ΅ΡΠ½ΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ Ρ ΡΠ°Π½ΠΈΡ ΠΊΠ°Π½ΠΎΠ½ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ, Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠ½ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈΠ΅ ΠΊΠΎΠΏΠΈΠΈ.
| ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ | Git (ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠΉ) | SVN (ΡΠ΅Π½ΡΡΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ) |
|---|---|---|
| ΠΠΎΠ΄Π΅Π»Ρ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ | ΠΠΎΠ»Π½ΡΠΉ ΠΊΠ»ΠΎΠ½ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ·Π»Π΅ | Π’ΠΎΠ½ΠΊΠ°Ρ ΡΠ°Π±ΠΎΡΠ°Ρ ΠΊΠΎΠΏΠΈΡ, ΠΈΡΡΠΎΡΠΈΡ Ρ ΡΠ°Π½ΠΈΡΡΡ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅ |
| Π Π°Π±ΠΎΡΠ° ΠΎΡΠ»Π°ΠΉΠ½ | ΠΠΎΠ»Π½ΡΠΉ commit, branch, diff, log | Π’ΠΎΠ»ΡΠΊΠΎ ΡΡΠ΅Π½ΠΈΠ΅; ΠΊΠΎΠΌΠΌΠΈΡΡ ΡΡΠ΅Π±ΡΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ° |
| Π‘ΡΠΎΠΈΠΌΠΎΡΡΡ Π²Π΅ΡΠ²Π»Π΅Π½ΠΈΡ | ΠΠΎΡΡΠΈ Π½ΡΠ»Π΅Π²Π°Ρ (ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΈΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠΌΠΈ) | ΠΠΎΡΠΎΠ³ΠΎΡΡΠΎΡΡΠ΅Π΅ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΉ |
| ΠΠ΄ΠΈΠ½Π°Ρ ΡΠΎΡΠΊΠ° ΠΎΡΠΊΠ°Π·Π° | ΠΡΡΡΡΡΡΠ²ΡΠ΅Ρ β Π»ΡΠ±ΠΎΠΉ ΠΊΠ»ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ | Π‘Π±ΠΎΠΉ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π²ΡΠ΅ ΠΊΠΎΠΌΠΌΠΈΡΡ |
| Π‘ΡΡΠ°ΡΠ΅Π³ΠΈΡ ΡΠ»ΠΈΡΠ½ΠΈΡ | Π’ΡΡΡ ΡΡΠΎΡΠΎΠ½Π½Π΅Π΅ ΡΠ»ΠΈΡΠ½ΠΈΠ΅ + rebase | Π’ΠΎΠ»ΡΠΊΠΎ ΡΡΡΡ ΡΡΠΎΡΠΎΠ½Π½Π΅Π΅ ΡΠ»ΠΈΡΠ½ΠΈΠ΅ |
| Π¦Π΅Π»ΠΎΡΡΠ½ΠΎΡΡΡ ΠΈΡΡΠΎΡΠΈΠΈ | Π₯Π΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ SHA-1/SHA-256 | ΠΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ Π½ΠΎΠΌΠ΅ΡΠ° ΡΠ΅Π²ΠΈΠ·ΠΈΠΉ |
| ΠΠ°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ ΠΎΡ ΡΠ΅ΡΠΈ | Π’ΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ push/pull/fetch | ΠΠΎΡΡΠΈ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ |
| Π§Π°ΡΡΠΈΡΠ½ΠΎΠ΅ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ | ΠΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Π½Π°ΡΠΈΠ²Π½ΠΎ | ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ (sparse checkout) |
| ΠΠΎΡΠΎΠ³ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ | ΠΠΎΠ»Π΅Π΅ ΠΊΡΡΡΠ°Ρ Π½Π°ΡΠ°Π»ΡΠ½Π°Ρ ΠΊΡΠΈΠ²Π°Ρ | ΠΡΠ³ΡΠ΅ Π΄Π»Ρ Π²Π΅ΡΠ΅ΡΠ°Π½ΠΎΠ² SVN |
| Π Π°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ½Π½ΠΎΡΡΡ (2024) | ~95% ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ | Π£ΡΡΠ°ΡΠ΅Π²ΡΠΈΠ΅ ΠΊΠΎΡΠΏΠΎΡΠ°ΡΠΈΠ²Π½ΡΠ΅ ΡΡΠ΅Π΄Ρ |
Π Π°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½Π°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Ρ ΠΎΡΡΠΈΠ½Π³ΠΎΠ²Π°Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°, ΡΠ°ΠΊΠ°Ρ ΠΊΠ°ΠΊ GitHub, ΠΈΡΠΏΡΡΡΠ²Π°Π΅Ρ ΡΠ±ΠΎΠΉ, Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΊΠ»ΠΎΠ½ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ»Π½ΠΎΠΉ Π°Π²ΡΠΎΡΠΈΡΠ΅ΡΠ½ΠΎΠΉ ΡΠ΅Π·Π΅ΡΠ²Π½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠ΅ΠΉ Π²ΡΠ΅ΠΉ ΠΈΡΡΠΎΡΠΈΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°.
ΠΡΠ½ΠΎΠ²Π½Π°Ρ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°: ΡΡΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Ρ ΡΠ°Π½ΠΈΡ Git
Git Π½Π΅ Ρ ΡΠ°Π½ΠΈΡ Π΄ΠΈΡΡΡ. ΠΠ½ Ρ ΡΠ°Π½ΠΈΡ ΡΠ½ΠΈΠΌΠΊΠΈ. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΊΠΎΠΌΠΌΠΈΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ Π΄Π΅ΡΠ΅Π²Π°, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ. ΠΡΠ»ΠΈ ΡΠ°ΠΉΠ» Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΡΡ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ ΠΊΠΎΠΌΠΌΠΈΡΠ°ΠΌΠΈ, Git Ρ ΡΠ°Π½ΠΈΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ blob, Π° Π½Π΅ Π΄ΡΠ±Π»ΠΈΡΡΠ΅Ρ Π΅Π³ΠΎ β ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ°ΠΊ Git Π΄ΠΎΡΡΠΈΠ³Π°Π΅Ρ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ.
Π§Π΅ΡΡΡΠ΅ ΡΡΠ½Π΄Π°ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΡΡ
ΡΠΈΠΏΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π² Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Git (.git/objects/):
- Blob β Π½Π΅ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½Π½ΠΎΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ°ΠΉΠ»Π°, Π°Π΄ΡΠ΅ΡΡΠ΅ΠΌΠΎΠ΅ ΠΏΠΎ SHA-Ρ Π΅ΡΡ
- Tree β ΡΠΏΠΈΡΠΎΠΊ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ, ΡΠΎΠΏΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΠΈΠΌΠ΅Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ² Ρ Ρ Π΅ΡΠ°ΠΌΠΈ blob ΠΈΠ»ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²ΡΠ΅Π²
- Commit β ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° Π΄Π΅ΡΠ΅Π²ΠΎ, Π½ΠΎΠ»Ρ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΡ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ², ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅ Π°Π²ΡΠΎΡΠ° ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
- Tag β Π°Π½Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΠΊΠΎΠΌΠΌΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ Π΄Π»Ρ ΠΌΠ°ΡΠΊΠ΅ΡΠΎΠ² ΡΠ΅Π»ΠΈΠ·ΠΎΠ²
ΠΠ°ΠΆΠ΄ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌ ΠΈ Π°Π΄ΡΠ΅ΡΡΠ΅ΡΡΡ ΠΏΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠΌΡ. ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π±Π°ΠΉΡΠ° Π² Π»ΡΠ±ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ ΠΏΠΎΡΠΎΠΆΠ΄Π°Π΅Ρ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π΄ΡΡΠ³ΠΎΠΉ SHA-Ρ Π΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΊΠ°ΡΠΊΠ°Π΄Π½ΠΎ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ Π²Π²Π΅ΡΡ ΠΏΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌ Π΄Π΅ΡΠ΅Π²Π° ΠΈ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ². ΠΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΡΡΠΎΠΌΡ ΠΈΡΡΠΎΡΠΈΡ Git ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°ΡΠΈΡΠ΅Π½Π° ΠΎΡ ΠΏΠΎΠ΄Π΄Π΅Π»ΠΊΠΈ β Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅Π·Π°ΠΌΠ΅ΡΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΏΡΠΎΡΠ»ΡΠΉ ΠΊΠΎΠΌΠΌΠΈΡ, Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ² Ρ Π΅ΡΠΈ Π²ΡΠ΅Ρ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ².
ΠΠ±Π»Π°ΡΡΡ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠΈ (ΡΠ°ΠΊΠΆΠ΅ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΠ°Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ, Ρ
ΡΠ°Π½ΠΈΡΡΡ Π² .git/index) β ΡΡΠΎ Π±ΠΈΠ½Π°ΡΠ½ΡΠΉ ΡΠ°ΠΉΠ», ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΠΌΡΠΉ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠΌΠΌΠΈΡ. ΠΡΠ° ΡΡΡΡ
Π·ΠΎΠ½Π½Π°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ β ΡΠ°Π±ΠΎΡΠ°Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ, ΠΈΠ½Π΄Π΅ΠΊΡ, ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ β ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π½Π΅ΠΏΠΎΠ½ΡΡΠΎΠΉ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ½ΠΎΠΉ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡΡ Git ΠΈ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠΌ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° Π·Π°ΡΡΡΠ΄Π½Π΅Π½ΠΈΠΉ Ρ Π½ΠΎΠ²ΠΈΡΠΊΠΎΠ².
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Git
ΠΠ΅ΡΠ΅Π΄ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠ°ΠΊΠΈΡ -Π»ΠΈΠ±ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΡ ΠΈ Π½Π°ΡΡΡΠΎΠΉΡΠ΅ ΡΠ²ΠΎΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ. Git Π²ΡΡΡΠ°ΠΈΠ²Π°Π΅Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± Π°Π²ΡΠΎΡΠ΅ Π² ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠΎΠΌΠΌΠΈΡΠ°, Π° Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Π½Π°ΡΡΡΠΎΠ΅Π½Π½Π°Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ β ΠΎΠ΄Π½Π° ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ½Π½ΡΡ ΠΏΡΠΈΡΠΈΠ½ Π·Π°ΠΏΡΡΠ°Π½Π½ΠΎΠΉ ΠΈΡΡΠΎΡΠΈΠΈ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ² Π² ΠΎΠ±ΡΠΈΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡΡ .
# Verify installation
git --version
# Set global identity (stored in ~/.gitconfig)
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
# Set default branch name to 'main' (modern convention)
git config --global init.defaultBranch main
# Set preferred editor for commit messages
git config --global core.editor "vim"
# Enable colored output
git config --global color.ui auto
# Verify configuration
git config --listΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΈΠΌΠ΅Π΅Ρ ΡΡΠΎΠ²Π½ΠΈ: --system (Π²ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ, /etc/gitconfig), --global (ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ~/.gitconfig) ΠΈ --local (ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ, .git/config). ΠΠΎΠ»Π΅Π΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠ΅ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠΈΡΠΎΠΊΠΈΠ΅.
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Git: ΠΏΠΎΠ»Π½ΡΠΉ ΡΠΏΡΠ°Π²ΠΎΡΠ½ΠΈΠΊ
ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈ ΠΊΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
git init ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ, Π·Π°ΠΏΠΈΡΡΠ²Π°Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ .git/ Π² ΡΠ΅ΠΊΡΡΡΡ ΠΏΠ°ΠΏΠΊΡ. ΠΠΎΠΌΠΌΠΈΡΡ ΠΏΡΠΈ ΡΡΠΎΠΌ Π½Π΅ ΡΠΎΠ·Π΄Π°ΡΡΡΡ β ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ ΠΏΡΡΡΡΠΌ.
git init
git init my-project # Initialize into a new subdirectory
git init --bare repo.git # Bare repository (no working tree, used for servers)ΠΠΎΠ»ΡΠΉ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΈ refs β Π±Π΅Π· ΡΠ°Π±ΠΎΡΠ΅ΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ. ΠΡΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΡΠΎΡΠΌΠ°Ρ Π΄Π»Ρ ΡΠ΄Π°Π»ΡΠ½Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ, Π² ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ push Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ². ΠΡΠ»ΠΈ Π²Ρ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°Π΅ΡΠ΅ Git Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅ VPS Hosting, Π²ΡΠ΅Π³Π΄Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠΉΡΠ΅ ΠΎΠ±ΡΠΈΠ΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ ΠΊΠ°ΠΊ Π³ΠΎΠ»ΡΠ΅.
git clone ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΠΎΠ»Π½ΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΊΠΎΠΏΠΈΡ ΡΠ΄Π°Π»ΡΠ½Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ, Π²ΠΊΠ»ΡΡΠ°Ρ Π²ΡΠ΅ Π²Π΅ΡΠΊΠΈ, ΡΠ΅Π³ΠΈ ΠΈ ΠΈΡΡΠΎΡΠΈΡ.
git clone https://github.com/user/repo.git
git clone git@github.com:user/repo.git # SSH transport (preferred for auth)
git clone --depth 1 https://github.com/user/repo.git # Shallow clone (latest commit only)
git clone --branch develop https://github.com/user/repo.git # Clone specific branchΠΠΎΠ²Π΅ΡΡ
Π½ΠΎΡΡΠ½ΡΠ΅ ΠΊΠ»ΠΎΠ½Ρ (--depth) ΠΏΠΎΠ»Π΅Π·Π½Ρ Π΄Π»Ρ CI/CD-ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠΎΠ², Π³Π΄Π΅ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅, Π° Π½Π΅ ΠΏΠΎΠ»Π½Π°Ρ ΠΈΡΡΠΎΡΠΈΡ. ΠΠ½ΠΈ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΎΠΊΡΠ°ΡΠ°ΡΡ Π²ΡΠ΅ΠΌΡ ΠΊΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π±ΠΎΠ»ΡΡΠΈΡ
ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠ΅Π², Π½ΠΎ ΠΏΡΠ΅ΠΏΡΡΡΡΠ²ΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΠΌ, Π·Π°Π²ΠΈΡΡΡΠΈΠΌ ΠΎΡ ΠΈΡΡΠΎΡΠΈΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ git bisect.
ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠΎΡΡΠΎΡΠ½ΠΈΡ
git status β Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΡΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠ°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π² Π»ΡΠ±ΠΎΠΌ ΡΠ°Π±ΠΎΡΠ΅ΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ΅. ΠΠ½Π° ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΡΡΡ
Π·ΠΎΠ½Π½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π²Π°ΡΠ΅Π³ΠΎ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ.
git status
git status -s # Short format: two-column status codes
git status -sb # Short format with branch infogit diff ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ Π·ΠΎΠ½Π°ΠΌΠΈ ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΌΠΈΡΠ°ΠΌΠΈ.
git diff # Working directory vs. index (unstaged changes)
git diff --staged # Index vs. last commit (what will be committed)
git diff HEAD # Working directory vs. last commit (all changes)
git diff main..feature # Compare tips of two branches
git diff abc123..def456 # Compare two specific commits
git diff --stat # Show changed files and line counts onlygit log ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΡ Π³ΡΠ°Ρ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ². ΠΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ β ΠΎΠ΄Π½ΠΈ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡΠ½ΡΡ
ΠΈ Π½Π΅Π΄ΠΎΠΎΡΠ΅Π½ΡΠ½Π½ΡΡ
Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ Git.
git log
git log --oneline --graph --decorate --all # Visual branch graph
git log -p # Show patch (diff) for each commit
git log --author="Jane" # Filter by author
git log --since="2 weeks ago" # Filter by date
git log --grep="fix:" # Filter by commit message pattern
git log -- path/to/file # History of a specific file
git log --follow -- path/to/file # Follow renamesΠΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ --graph --oneline --decorate --all Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½Π°, ΡΡΠΎ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠΎΠ² ΡΠΎΠ·Π΄Π°ΡΡ Π΄Π»Ρ Π½Π΅Ρ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌ:
git config --global alias.lg "log --oneline --graph --decorate --all"ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° ΠΈ ΠΊΠΎΠΌΠΌΠΈΡ
git add filename.py # Stage a specific file
git add src/ # Stage an entire directory
git add . # Stage all changes in current directory
git add -p # Interactive patch staging (stage hunks, not whole files)
git add -u # Stage modifications and deletions, but not new filesΠΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½Π°Ρ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° (git add -p) β ΠΎΠ΄Π½Π° ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡΠ½ΡΡ
ΠΈ Π½Π΅Π΄ΠΎΠΎΡΠ΅Π½ΡΠ½Π½ΡΡ
Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ Git. ΠΠ½Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΈ Π²ΡΠ±ΠΎΡΠΎΡΠ½ΠΎ ΠΏΠΎΠ΄Π³ΠΎΡΠ°Π²Π»ΠΈΠ²Π°ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΡ Π²Π½ΡΡΡΠΈ ΡΠ°ΠΉΠ»Π°, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Ρ ΡΠΎΡΠ½ΡΠ΅ Π°ΡΠΎΠΌΠ°ΡΠ½ΡΠ΅ ΠΊΠΎΠΌΠΌΠΈΡΡ Π΄Π°ΠΆΠ΅ ΠΊΠΎΠ³Π΄Π° ΡΠ°Π±ΠΎΡΠ°Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π½Π΅ΡΠ²ΡΠ·Π°Π½Π½ΡΡ
ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.
git commit -m "feat: add OAuth2 token refresh logic"
git commit --amend # Modify the most recent commit (message or content)
git commit --amend --no-edit # Amend content without changing the message
git commit -v # Open editor showing full diff of staged changesΠΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ: Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠΉΡΠ΅ ΠΊΠΎΠΌΠΌΠΈΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΆΠ΅ Π±ΡΠ»ΠΈ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½Ρ Π² ΠΎΠ±ΡΠΈΠΉ ΡΠ΄Π°Π»ΡΠ½Π½ΡΠΉ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ. ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ Ρ Π΅Ρ ΠΊΠΎΠΌΠΌΠΈΡΠ°, Π²ΡΠ½ΡΠΆΠ΄Π°Ρ ΠΊΠΎΠ»Π»Π΅Π³ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ rebase ΠΈΠ»ΠΈ ΡΠ±ΡΠΎΡ ΡΠ²ΠΎΠΈΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ Π²Π΅ΡΠΎΠΊ.
Push ΠΈ Pull
git push origin main
git push origin feature/auth # Push a specific branch
git push -u origin feature/auth # Push and set upstream tracking
git push --force-with-lease # Safer force push (fails if remote has new commits)
git push origin --delete old-branch # Delete a remote branch
git push --tags # Push all local tagsΠΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°ΠΉΡΠ΅ --force-with-lease Π²ΠΌΠ΅ΡΡΠΎ --force, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ΄Π°Π»ΡΠ½Π½ΡΡ ΠΈΡΡΠΎΡΠΈΡ. ΠΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, ΡΡΠΎ Π½ΠΈΠΊΡΠΎ Π΄ΡΡΠ³ΠΎΠΉ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ» push Ρ ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π²Π°ΡΠ΅Π³ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ fetch, ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°Ρ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΡ ΠΏΠΎΡΠ΅ΡΡ Π΄Π°Π½Π½ΡΡ
.
git pull origin main
git pull --rebase origin main # Fetch and rebase instead of merge
git pull --ff-only # Only fast-forward; abort if a merge commit would be createdgit fetch Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ ΡΠ΄Π°Π»ΡΠ½Π½ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ, Π½Π΅ Π·Π°ΡΡΠ°Π³ΠΈΠ²Π°Ρ Π²Π°ΡΡ ΡΠ°Π±ΠΎΡΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ ΠΈΠ»ΠΈ ΡΠ΅ΠΊΡΡΡΡ Π²Π΅ΡΠΊΡ. ΠΡΠΎ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΈΠ· upstream ΠΏΠ΅ΡΠ΅Π΄ ΠΈΡ
ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠ΅ΠΉ.
git fetch origin
git fetch --all # Fetch from all remotes
git fetch --prune # Remove remote-tracking branches that no longer exist upstreamΠΠ΅ΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΡΠ»ΠΈΡΠ½ΠΈΠ΅: ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ
ΠΠΎΠ΄Π΅Π»Ρ Π²Π΅ΡΠ²Π»Π΅Π½ΠΈΡ Git β Π΅Ρ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ½ΠΎ Π·Π½Π°ΡΠΈΠΌΠ°Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ. ΠΠ΅ΡΠΊΠ° β ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ (ΡΠ°ΠΉΠ» ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ 41 Π±Π°ΠΉΡ Π² .git/refs/heads/) Π½Π° Ρ
Π΅Ρ ΠΊΠΎΠΌΠΌΠΈΡΠ°. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π²Π΅ΡΠΊΠΈ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ.
Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π²Π΅ΡΠΊΠ°ΠΌΠΈ
git branch # List local branches
git branch -a # List all branches (local and remote-tracking)
git branch -v # List branches with last commit info
git branch feature/user-auth # Create a new branch
git branch -d feature/user-auth # Delete merged branch
git branch -D feature/user-auth # Force delete (even if unmerged)
git branch -m old-name new-name # Rename a branchΠΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π²Π΅ΡΠΎΠΊ
Π‘ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ Git (2.23+) ΡΠ°Π·Π΄Π΅Π»ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΠΈ git checkout Π½Π° Π΄Π²Π΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
git switch main # Switch to existing branch
git switch -c feature/payments # Create and switch in one step
git restore filename.py # Discard working directory changes to a file
git restore --staged filename.py # Unstage a file (remove from index)git checkout ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π΄Π»Ρ Π²ΡΠ΅Π³ΠΎ ΡΡΠΎΠ³ΠΎ, Π½ΠΎ git switch ΠΈ git restore ΠΈΠΌΠ΅ΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠΊΡΡ ΠΈ ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΡΡ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΡ ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°ΡΡΡΡ Π² ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΡΠ°Π±ΠΎΡΠΈΡ
ΠΏΡΠΎΡΠ΅ΡΡΠ°Ρ
.
Π‘ΡΡΠ°ΡΠ΅Π³ΠΈΠΈ ΡΠ»ΠΈΡΠ½ΠΈΡ
git merge feature/user-auth # Standard merge (creates merge commit if needed)
git merge --no-ff feature/user-auth # Always create merge commit (preserves branch topology)
git merge --squash feature/user-auth # Squash all branch commits into one staged change
git merge --abort # Abort an in-progress conflicted mergeΠ‘Π»ΠΈΡΠ½ΠΈΠ΅ Ρ ΠΏΠ΅ΡΠ΅ΠΌΠΎΡΠΊΠΎΠΉ Π²ΠΏΠ΅ΡΡΠ΄ (fast-forward) ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ, ΠΊΠΎΠ³Π΄Π° ΡΠ΅Π»Π΅Π²Π°Ρ Π²Π΅ΡΠΊΠ° Π½Π΅ ΡΠ°ΡΡ
ΠΎΠ΄ΠΈΠ»Π°ΡΡ Ρ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠΉ β Git ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π²ΠΏΠ΅ΡΡΠ΄. ΠΠΎΠΌΠΌΠΈΡ ΡΠ»ΠΈΡΠ½ΠΈΡ ΠΏΡΠΈ ΡΡΠΎΠΌ Π½Π΅ ΡΠΎΠ·Π΄Π°ΡΡΡΡ. --no-ff ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠΎΠΌΠΌΠΈΡ ΡΠ»ΠΈΡΠ½ΠΈΡ Π΄Π°ΠΆΠ΅ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, ΡΡΠΎ ΡΠΎΡ
ΡΠ°Π½ΡΠ΅Ρ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΡΡ ΠΈΡΡΠΎΡΠΈΡ Π²Π΅ΡΠΎΠΊ ΡΡΠ½ΠΊΡΠΈΠΉ Π² git log --graph.
Π‘Π»ΠΈΡΠ½ΠΈΠ΅ ΡΠΎ ΡΠΆΠ°ΡΠΈΠ΅ΠΌ (squash merge) ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ Π²ΡΠ΅ ΠΊΠΎΠΌΠΌΠΈΡΡ ΠΈΠ· Π²Π΅ΡΠΊΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΠΎΠ΄Π½ΠΎ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π·Π°ΡΠ΅ΠΌ ΡΠΈΠΊΡΠΈΡΡΠ΅ΡΡΡ Π²ΡΡΡΠ½ΡΡ. ΠΡΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΈΡΡΡΡ Π»ΠΈΠ½Π΅ΠΉΠ½ΡΡ ΠΈΡΡΠΎΡΠΈΡ Π² main, Π½ΠΎ ΠΎΡΠ±ΡΠ°ΡΡΠ²Π°Π΅Ρ Π΄Π΅ΡΠ°Π»ΡΠ½ΡΡ ΠΈΡΡΠΎΡΠΈΡ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ² Π²Π΅ΡΠΊΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ.
Rebase
git rebase Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ ΠΊΠΎΠΌΠΌΠΈΡΡ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Π²Π΅ΡΠΊΠΈ ΠΏΠΎΠ²Π΅ΡΡ
Π΄ΡΡΠ³ΠΎΠΉ, ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΡΠ²Π°Ρ ΠΈΡ
Ρ
Π΅ΡΠΈ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ ΠΈΡΡΠΎΡΠΈΠΈ.
git rebase main # Rebase current branch onto main
git rebase -i HEAD~5 # Interactive rebase: edit last 5 commits
git rebase --onto main server client # Transplant client branch onto main, excluding server
git rebase --abort # Abort a rebase in progress
git rebase --continue # Continue after resolving a conflictΠΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΠΉ rebase (-i) β ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠ°Π½ΠΈΡ ΡΠΈΡΡΠΎΡΡ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ². ΠΠ½ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΡΠΏΠΎΡΡΠ΄ΠΎΡΠΈΠ²Π°ΡΡ, ΡΠΆΠΈΠΌΠ°ΡΡ, ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ, ΡΠ΄Π°Π»ΡΡΡ ΠΈΠ»ΠΈ ΡΠ°Π·Π΄Π΅Π»ΡΡΡ ΠΊΠΎΠΌΠΌΠΈΡΡ ΠΏΠ΅ΡΠ΅Π΄ ΠΈΡ
ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠ΅ΠΉ. Π’ΠΈΠΏΠΈΡΠ½ΡΠΉ ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ: ΠΎΡΠΈΡΡΠΊΠ° Π·Π°ΠΏΡΡΠ°Π½Π½ΠΎΠΉ Π²Π΅ΡΠΊΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠ΅ΡΠ΅Π΄ ΠΎΡΠΊΡΡΡΠΈΠ΅ΠΌ pull request.
| Π‘ΡΡΠ°ΡΠ΅Π³ΠΈΡ | ΠΡΡΠΎΡΠΈΡ | Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ | Π ΠΈΡΠΊ |
|---|---|---|---|
| Merge (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ) | ΠΠ΅Π»ΠΈΠ½Π΅ΠΉΠ½Π°Ρ, ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ Π²Π΅ΡΠΊΠΈ | ΠΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡΡΠΈΠ΅ Π²Π΅ΡΠΊΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ | ΠΠ°ΡΡΠΌΠ»ΡΠ½Π½ΡΠΉ `git log` |
| Merge `βno-ff` | ΠΠ΅Π»ΠΈΠ½Π΅ΠΉΠ½Π°Ρ, ΡΠ²Π½ΡΠ΅ ΠΊΠΎΠΌΠΌΠΈΡΡ ΡΠ»ΠΈΡΠ½ΠΈΡ | ΠΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡ Π²Π΅ΡΠΎΠΊ | ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌΡ |
| Merge `βsquash` | ΠΠΈΠ½Π΅ΠΉΠ½Π°Ρ, ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠΌΠΌΠΈΡ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ | Π§ΠΈΡΡΠ°Ρ ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ Π²Π΅ΡΠΊΠ° | Π’Π΅ΡΡΠ΅ΡΡΡ Π΄Π΅ΡΠ°Π»ΡΠ½Π°Ρ ΠΈΡΡΠΎΡΠΈΡ |
| Rebase | ΠΠΈΠ½Π΅ΠΉΠ½Π°Ρ, Π±Π΅Π· ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ² ΡΠ»ΠΈΡΠ½ΠΈΡ | ΠΠΈΡΠ½ΡΠ΅ Π²Π΅ΡΠΊΠΈ, ΠΎΡΠΈΡΡΠΊΠ° ΠΏΠ΅ΡΠ΅Π΄ PR | ΠΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ Ρ Π΅ΡΠΈ; ΠΎΠΏΠ°ΡΠ½ΠΎ Π½Π° ΠΎΠ±ΡΠΈΡ Π²Π΅ΡΠΊΠ°Ρ |
| Cherry-pick | ΠΡΠ±ΠΎΡΠΎΡΠ½Π°Ρ, Π»ΠΈΠ½Π΅ΠΉΠ½Π°Ρ | ΠΡΠΊΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΉ | ΠΡΠ±Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρ Π²Π΅ΡΠΊΠ°ΠΌΠΈ |
ΠΠΎΠ»ΠΎΡΠΎΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ rebase: Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΠΉΡΠ΅ rebase ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ², ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ Π² ΠΏΡΠ±Π»ΠΈΡΠ½ΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΉ Π²Π΅ΡΠΊΠ΅. Rebase ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ Ρ Π΅ΡΠΈ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ². ΠΡΠ»ΠΈ ΠΊΠΎΠ»Π»Π΅Π³Π° ΠΎΡΠ½ΠΎΠ²Π°Π» ΡΠ²ΠΎΡ ΡΠ°Π±ΠΎΡΡ Π½Π° ΡΡΠΈΡ ΠΊΠΎΠΌΠΌΠΈΡΠ°Ρ , Π΅Π³ΠΎ ΠΈΡΡΠΎΡΠΈΡ ΡΠ°Π·ΠΎΠΉΠ΄ΡΡΡΡ, ΠΈ Π΅ΠΌΡ ΠΏΡΠΈΠ΄ΡΡΡΡ Π±ΠΎΠ»Π΅Π·Π½Π΅Π½Π½ΠΎ ΡΠΎΠ³Π»Π°ΡΠΎΠ²ΡΠ²Π°ΡΡ Π΅Ρ Π²ΡΡΡΠ½ΡΡ.
Π Π°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΎΠ² ΡΠ»ΠΈΡΠ½ΠΈΡ
ΠΠΎΠ½ΡΠ»ΠΈΠΊΡΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ, ΠΊΠΎΠ³Π΄Π° Π΄Π²Π΅ Π²Π΅ΡΠΊΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΎΠ΄Π½Ρ ΠΈ ΡΡ ΠΆΠ΅ ΠΎΠ±Π»Π°ΡΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠ°ΠΉΠ»Π°. Git ΠΎΡΠΌΠ΅ΡΠ°Π΅Ρ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡ Π² ΡΠ°ΠΉΠ»Π΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΌΠΈ ΠΌΠ°ΡΠΊΠ΅ΡΠ°ΠΌΠΈ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠ°:
<<<<<<< HEAD
const timeout = 30000;
=======
const timeout = 60000;
>>>>>>> feature/increase-timeoutΠ Π°Π±ΠΎΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ:
# After a conflicted merge or rebase
git status # Identify conflicted files (marked as "both modified")
# Edit each conflicted file, remove markers, keep correct content
git add resolved-file.js # Mark as resolved
git commit # Complete the merge (message is pre-populated)ΠΠ»Ρ ΡΠ»ΠΎΠΆΠ½ΡΡ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΎΠ² ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΡΡΡΡ ΡΡΠΎΡΠΎΠ½Π½Π΅Π³ΠΎ ΡΠ»ΠΈΡΠ½ΠΈΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π±ΠΎΠ»Π΅Π΅ Π½Π°Π³Π»ΡΠ΄Π½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅:
git mergetool # Launch configured merge tool (vimdiff, meld, etc.)
git config --global merge.tool vimdiffΠΡΠΌΠ΅Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ: ΠΌΠ°ΡΡΠΈΡΠ° ΡΠ΅ΡΠ΅Π½ΠΈΠΉ
ΠΡΠ±ΠΎΡ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΎΡΠΌΠ΅Π½Ρ β ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ½Π½ΡΡ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΠΏΠΎΡΠ΅ΡΡΡΡ ΡΠ°Π±ΠΎΡΡ ΠΈΠ»ΠΈ ΠΏΠΎΠ²ΡΠ΅Π΄ΠΈΡΡ ΠΎΠ±ΡΡΡ ΠΈΡΡΠΎΡΠΈΡ. ΠΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ Π²ΡΠ±ΠΎΡ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π΄Π²ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ : Π³Π΄Π΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈ Π±ΡΠ»ΠΎ Π»ΠΈ ΠΎΠ½ΠΎ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½ΠΎ.
| Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ | ΠΠΎΠΌΠ°Π½Π΄Π° | ΠΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΠΈΡΡΠΎΡΠΈΡ | ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ Π² ΠΎΠ±ΡΠ΅ΠΉ Π²Π΅ΡΠΊΠ΅ |
|---|---|---|---|
| Π£Π±ΡΠ°ΡΡ ΡΠ°ΠΉΠ» ΠΈΠ· ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠΈ | `git restore βstaged file` | ΠΠ΅Ρ | ΠΠ° |
| ΠΡΠΌΠ΅Π½ΠΈΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΡΠ°Π±ΠΎΡΠ΅ΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ | `git restore file` | ΠΠ΅Ρ | ΠΠ° |
| ΠΡΠΌΠ΅Π½ΠΈΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΊΠΎΠΌΠΌΠΈΡ, ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π½ΡΠΌΠΈ | `git reset βsoft HEAD~1` | ΠΠ° | ΠΠ΅Ρ |
| ΠΡΠΌΠ΅Π½ΠΈΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΊΠΎΠΌΠΌΠΈΡ, ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π½Π΅ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π½ΡΠΌΠΈ | `git reset HEAD~1` | ΠΠ° | ΠΠ΅Ρ |
| ΠΡΠΌΠ΅Π½ΠΈΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΊΠΎΠΌΠΌΠΈΡ, ΡΠ΄Π°Π»ΠΈΡΡ Π²ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ | `git reset βhard HEAD~1` | ΠΠ° | ΠΠ΅Ρ |
| ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ ΠΎΡΠΌΠ΅Π½ΠΈΡΡ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠΈΡ | `git revert <hash>` | ΠΠ΅Ρ | ΠΠ° |
| Π£Π΄Π°Π»ΠΈΡΡ ΡΠ°ΠΉΠ» ΠΈΠ· Π²ΡΠ΅ΠΉ ΠΈΡΡΠΎΡΠΈΠΈ | `git filter-repo` | ΠΠ° | ΠΠ΅Ρ |
git reset --soft HEAD~1 # Undo commit, keep changes in index
git reset HEAD~1 # Undo commit, keep changes in working dir
git reset --hard HEAD~1 # Undo commit, discard all changes permanently
git revert abc1234 # Create new commit that inverts abc1234
git revert HEAD~3..HEAD # Revert last 3 commits (creates 3 revert commits)
git revert -n HEAD~3..HEAD # Stage the reversals without committing (batch revert)git reset --hard Π½Π΅ΠΎΠ±ΡΠ°ΡΠΈΠΌ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠ±ΡΡΠ½ΡΡ
ΠΊΠΎΠΌΠ°Π½Π΄ Git. ΠΡΠ»ΠΈ Π²Ρ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ Π΅Π³ΠΎ, Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΏΡΡΡ ΠΊ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ β git reflog, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΠΊΠ°ΠΆΠ΄ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ, Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΡΠΊΠ°Π·ΡΠ²Π°Π» HEAD, ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ 90 Π΄Π½Π΅ΠΉ.
git reflog # Show HEAD movement history with hashes
git checkout -b recovery abc1234 # Recover by creating a branch at the lost commitΠΡΠΎΠ΄Π²ΠΈΠ½ΡΡΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π΄Π»Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π½ΡΡ ΡΠ°Π±ΠΎΡΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ²
git stash
git stash ΡΠΎΡ
ΡΠ°Π½ΡΠ΅Ρ ΡΠ΅ΠΊΡΡΠ΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΠ΅ΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠ° Π² ΡΡΠ΅ΠΊ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡ ΡΠΈΡΡΠΎΠ΅ ΡΠ°Π±ΠΎΡΠ΅Π΅ Π΄Π΅ΡΠ΅Π²ΠΎ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°.
git stash # Stash tracked changes
git stash -u # Include untracked files
git stash push -m "WIP: auth refactor" # Stash with a descriptive name
git stash list # List all stash entries
git stash pop # Apply most recent stash and remove it from stack
git stash apply stash@{2} # Apply specific stash without removing it
git stash drop stash@{2} # Delete a specific stash entry
git stash branch feature/wip # Create a new branch from a stashgit cherry-pick
git cherry-pick abc1234 # Apply a single commit to current branch
git cherry-pick abc1234 def5678 # Apply multiple commits
git cherry-pick abc1234 --no-commit # Apply changes without committing
git cherry-pick main~3..main # Apply a range of commitsCherry-pick β ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ Π΄Π»Ρ Π±ΡΠΊΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΉ ΠΎΡΠΈΠ±ΠΎΠΊ Π² Π²Π΅ΡΠΊΠΈ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΡ. ΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΠ΅ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΡΡ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ Π² main, Π²Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΠ΅ cherry-pick ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡΠ° Π² v2.1-stable ΠΈ v2.0-stable Π±Π΅Π· ΡΠ»ΠΈΡΠ½ΠΈΡ Π½Π΅ΡΠ²ΡΠ·Π°Π½Π½ΡΡ
ΡΡΠ½ΠΊΡΠΈΠΉ.
git bisect
git bisect Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π±ΠΈΠ½Π°ΡΠ½ΡΠΉ ΠΏΠΎΠΈΡΠΊ ΠΏΠΎ ΠΈΡΡΠΎΡΠΈΠΈ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ² Π΄Π»Ρ Π½Π°Ρ
ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π±ΡΠ»Π° Π²Π²Π΅Π΄Π΅Π½Π° ΠΎΡΠΈΠ±ΠΊΠ°. ΠΡΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡΠ½ΡΡ
ΠΈ ΠΌΠ°Π»ΠΎΠΈΠ·Π²Π΅ΡΡΠ½ΡΡ
ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² ΠΎΡΠ»Π°Π΄ΠΊΠΈ Git.
git bisect start
git bisect bad # Mark current commit as broken
git bisect good v2.3.0 # Mark a known-good commit or tag
# Git checks out the midpoint commit automatically
# Test your code, then:
git bisect good # If this commit is fine
git bisect bad # If this commit is broken
# Repeat until Git identifies the first bad commit
git bisect reset # Return to original HEAD when doneΠ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ Ρ 1 000 ΠΊΠΎΠΌΠΌΠΈΡΠ°ΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Ρ
ΠΎΡΠΎΡΠ΅ΠΉ ΠΈ ΠΏΠ»ΠΎΡ
ΠΎΠΉ ΡΠΎΡΠΊΠ°ΠΌΠΈ git bisect Π½Π°Ρ
ΠΎΠ΄ΠΈΡ Π²ΠΈΠ½ΠΎΠ²Π½ΠΈΠΊΠ° Π½Π΅ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ Π·Π° 10 ΡΠ°Π³ΠΎΠ².
git tag
Π’Π΅Π³ΠΈ ΠΎΡΠΌΠ΅ΡΠ°ΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠ΅ ΠΊΠΎΠΌΠΌΠΈΡΡ ΠΊΠ°ΠΊ Π·Π½Π°ΡΠΈΠΌΡΠ΅ β ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π²Π΅ΡΡΠΈΠΈ ΡΠ΅Π»ΠΈΠ·ΠΎΠ².
git tag v1.4.2 # Lightweight tag (just a pointer)
git tag -a v1.4.2 -m "Release 1.4.2" # Annotated tag (recommended; stores metadata)
git tag -a v1.4.2 abc1234 # Tag a specific past commit
git push origin v1.4.2 # Push a specific tag
git push origin --tags # Push all tags
git tag -d v1.4.2 # Delete local tag
git push origin --delete v1.4.2 # Delete remote tagΠΡΠ΅Π³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π°Π½Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ΅Π³ΠΈ Π΄Π»Ρ ΡΠ΅Π»ΠΈΠ·ΠΎΠ². ΠΠ½ΠΈ Ρ ΡΠ°Π½ΡΡ ΠΈΠΌΡ, email, Π΄Π°ΡΡ ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠ·Π΄Π°ΡΠ΅Π»Ρ ΡΠ΅Π³Π°, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ GPG. ΠΡΠ³ΠΊΠΈΠ΅ ΡΠ΅Π³ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ Π·Π°ΠΊΠ»Π°Π΄ΠΎΠΊ.
git worktree
git worktree ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π±ΠΎΡΠΈΡ
Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΉ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ β ΠΊΠ°ΠΆΠ΄ΡΡ Π½Π° ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΉ Π²Π΅ΡΠΊΠ΅. ΠΡΠΎ ΡΡΡΡΠ°Π½ΡΠ΅Ρ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ Π² stash ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΌΠΈΡΠ΅ Π½Π΅Π·Π°Π²Π΅ΡΡΡΠ½Π½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ Π½Π° hotfix.
git worktree add ../hotfix-branch hotfix/critical-auth-bug
git worktree list
git worktree remove ../hotfix-branchΠΡΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΡΠ΅Π½Π½ΠΎ Π½Π° Dedicated Server, ΡΠ°Π±ΠΎΡΠ°ΡΡΠ΅ΠΌ Ρ CI/CD-ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠΎΠΌ, Π³Π΄Π΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌ Π·Π°Π΄Π°ΡΠ°ΠΌ ΡΠ±ΠΎΡΠΊΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ°Π·Π½ΡΠΌ Π²Π΅ΡΠΊΠ°ΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ Π±Π΅Π· Π²Π·Π°ΠΈΠΌΠ½ΡΡ ΠΏΠΎΠΌΠ΅Ρ .
Π Π°Π±ΠΎΡΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ Git Π΄Π»Ρ ΠΊΠΎΠΌΠ°Π½Π΄
ΠΡΠ°Π²ΠΈΠ»ΡΠ½Π°Ρ ΡΡΡΠ°ΡΠ΅Π³ΠΈΡ Π²Π΅ΡΠ²Π»Π΅Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠ°ΡΡΠΎΡΡ Π²ΡΠΏΡΡΠΊΠΎΠ² ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Ρ. Π‘ΡΡΠ΅ΡΡΠ²ΡΡΡ ΡΡΠΈ Π΄ΠΎΠΌΠΈΠ½ΠΈΡΡΡΡΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ:
Π Π°Π±ΠΎΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Ρ Π²Π΅ΡΠΊΠ°ΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ
ΠΠ°ΠΆΠ΄Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠ»ΠΈ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΆΠΈΠ²ΡΡ Π² ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΉ Π²Π΅ΡΠΊΠ΅. Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΎΡΠΊΡΡΠ²Π°ΡΡ pull request Π΄Π»Ρ ΡΠ»ΠΈΡΠ½ΠΈΡ Π² main. ΠΡΠΎΡΡΠΎΠΉ ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ Π΄Π»Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° ΠΊΠΎΠΌΠ°Π½Π΄.
Gitflow
ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡΡΠΈΠ΅ Π²Π΅ΡΠΊΠΈ main ΠΈ develop, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΊΡΠ°ΡΠΊΠΎΡΡΠΎΡΠ½ΡΠ΅ Π²Π΅ΡΠΊΠΈ feature/, release/ ΠΈ hotfix/ ΡΠΎ ΡΡΡΠΎΠ³ΠΈΠΌΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌΠΈ ΡΠ»ΠΈΡΠ½ΠΈΡ. ΠΠΎΠ΄Ρ
ΠΎΠ΄ΠΈΡ Π΄Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ Ρ ΡΠ²Π½ΡΠΌΠΈ Π²Π΅ΡΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΡΠ΅Π»ΠΈΠ·Π°ΠΌΠΈ (Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΡΠΏΠ°ΠΊΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ).
Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ trunk
Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΊΠΎΠΌΠΌΠΈΡΡΡ Π½Π°ΠΏΡΡΠΌΡΡ Π² main (ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΎΡΠ΅Π½Ρ ΠΊΡΠ°ΡΠΊΠΎΡΡΠΎΡΠ½ΡΠ΅ Π²Π΅ΡΠΊΠΈ, ΡΠ»ΠΈΠ²Π°Π΅ΠΌΡΠ΅ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π½Ρ). Π Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΌΠ΅ΡΠ΅ ΠΎΠΏΠΈΡΠ°Π΅ΡΡΡ Π½Π° ΡΠ»Π°Π³ΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ Π΄Π»Ρ ΡΠΊΡΡΡΠΈΡ Π½Π΅Π·Π°Π²Π΅ΡΡΡΠ½Π½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ. ΠΡΠ΅Π΄ΠΏΠΎΡΡΠΈΡΠ΅Π»ΡΠ½Π° Π΄Π»Ρ Π²ΡΡΠΎΠΊΠΎΡΠΊΠΎΡΠΎΡΡΠ½ΡΡ
ΠΊΠΎΠΌΠ°Π½Π΄, ΠΏΡΠ°ΠΊΡΠΈΠΊΡΡΡΠΈΡ
Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΠΎΠ΅ ΡΠ°Π·Π²ΡΡΡΡΠ²Π°Π½ΠΈΠ΅.
| Π Π°Π±ΠΎΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ | Π§Π°ΡΡΠΎΡΠ° Π²ΡΠΏΡΡΠΊΠΎΠ² | Π Π°Π·ΠΌΠ΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ | Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ CI/CD |
|---|---|---|---|
| Feature Branch | ΠΠΈΠ±ΠΊΠ°Ρ | ΠΡΠ±ΠΎΠΉ | ΠΠΈΠ·ΠΊΠ°Ρ |
| Gitflow | ΠΠ»Π°Π½ΠΎΠ²ΡΠ΅ ΡΠ΅Π»ΠΈΠ·Ρ | Π‘ΡΠ΅Π΄Π½ΠΈΠΉβΠΡΡΠΏΠ½ΡΠΉ | Π‘ΡΠ΅Π΄Π½ΡΡ |
| Trunk-Based | ΠΠ΅ΠΏΡΠ΅ΡΡΠ²Π½ΠΎΠ΅ ΡΠ°Π·Π²ΡΡΡΡΠ²Π°Π½ΠΈΠ΅ | ΠΡΠ±ΠΎΠΉ | ΠΡΡΠΎΠΊΠ°Ρ |
Π₯ΠΎΡΡΠΈΠ½Π³ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠ΅Π² Git: ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΡΠΉ Ρ ΠΎΡΡΠΈΠ½Π³ vs. ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΠ΅ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ
ΠΠ»Ρ ΠΊΠΎΠΌΠ°Π½Π΄, ΠΊΠΎΡΠΎΡΡΠΌ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΡΠ²Π΅ΡΠ΅Π½ΠΈΡΠ΅Ρ Π΄Π°Π½Π½ΡΡ , ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ Π½ΠΎΡΠΌΠ°ΡΠΈΠ²Π½ΡΠΌ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡΠΌ ΠΈΠ»ΠΈ ΡΠ°ΡΡΠ½Π°Ρ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ°, ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΡΠΉ Ρ ΠΎΡΡΠΈΠ½Π³ Git-ΡΠ΅ΡΠ²Π΅ΡΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΆΠΈΠ·Π½Π΅ΡΠΏΠΎΡΠΎΠ±Π½ΡΠΌ ΠΈ Π·Π°ΡΠ°ΡΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΌ Π²ΡΠ±ΠΎΡΠΎΠΌ. ΠΠ°ΡΠΈΠ°Π½ΡΡ Π²ΠΊΠ»ΡΡΠ°ΡΡ Gitea (Π»ΡΠ³ΠΊΠΈΠΉ, Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Go), GitLab CE (ΠΏΠΎΠ»Π½Π°Ρ DevOps-ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°) ΠΈ Forgejo (ΡΠΎΡΠΊ Gitea Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π°).
ΠΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΡΠ½Π½ΡΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ Gitea ΠΊΠΎΠΌΡΠΎΡΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π° ΠΏΠ»Π°Π½Π΅ VPS Hosting Ρ 2 vCPU ΠΈ 2 GB RAM. ΠΠ»Ρ Π±ΠΎΠ»Π΅Π΅ ΠΊΡΡΠΏΠ½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈΠ»ΠΈ GitLab CE Ρ CI-ΡΠ°Π½Π½Π΅ΡΠ°ΠΌΠΈ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ 4β8 GB RAM.
ΠΡΠΈ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎΠΌ Ρ ΠΎΡΡΠΈΠ½Π³Π΅ Π·Π°ΡΠΈΡΠΈΡΠ΅ ΡΠ²ΠΎΠΉ Git-ΡΠ΅ΡΠ²Π΅Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ:
- ΠΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΏΠΎ SSH-ΠΊΠ»ΡΡΡ (ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΎΡΠΊΠ»ΡΡΠΈΡΠ΅ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΏΠΎ ΠΏΠ°ΡΠΎΠ»Ρ)
- HTTPS Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΎΠΌ β SSL Certificates Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡ Π΄Π»Ρ Π·Π°ΡΠΈΡΡ ΡΡΡΡΠ½ΡΡ Π΄Π°Π½Π½ΡΡ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅
- ΠΡΠ°Π²ΠΈΠ» Π±ΡΠ°Π½Π΄ΠΌΠ°ΡΡΡΠ°, ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°ΡΡΠΈΡ Π΄ΠΎΡΡΡΠΏ ΠΊ Git-ΠΏΠΎΡΡΡ (22 ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ SSH-ΠΏΠΎΡΡ, 443 Π΄Π»Ρ HTTPS)
- Π Π΅Π³ΡΠ»ΡΡΠ½ΡΡ
Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ
ΡΠ΅Π·Π΅ΡΠ²Π½ΡΡ
ΠΊΠΎΠΏΠΈΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΉ Π³ΠΎΠ»ΠΎΠ³ΠΎ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ
.git - Π‘Π΅ΠΊΡΠ΅ΡΠΎΠ² webhook Π΄Π»Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΉ CI/CD
ΠΠ»Ρ ΠΊΠΎΠΌΠ°Π½Π΄, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΡ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΡ ΡΠ°Π·Π²ΡΡΡΡΠ²Π°Π½ΠΈΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Git ΠΈ ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΡ Π²Π΅Π±-ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠΎΠΉ, ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΠ΅ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΡΠ½Π½ΠΎΠ³ΠΎ Git-ΡΠ΅ΡΠ²Π΅ΡΠ° Ρ VPS with cPanel Π΄Π°ΡΡ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Ρ ΡΠΊΠΈ ΡΠ°Π·Π²ΡΡΡΡΠ²Π°Π½ΠΈΡ Π½Π°ΡΡΠ΄Ρ Ρ ΠΏΡΠΈΠ²ΡΡΠ½ΡΠΌΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Ρ ΠΎΡΡΠΈΠ½Π³ΠΎΠΌ.
Git-Ρ ΡΠΊΠΈ: Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΠΊΠ°ΡΠ΅ΡΡΠ²Π°
Git-Ρ
ΡΠΊΠΈ β ΡΡΠΎ ΡΠΊΡΠΈΠΏΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΡ
ΡΠΎΡΠΊΠ°Ρ
ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΊΠ»Π° Git. ΠΠ½ΠΈ Π½Π°Ρ
ΠΎΠ΄ΡΡΡΡ Π² .git/hooks/ ΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π½Π΅ ΡΠΈΠΊΡΠΈΡΡΡΡΡΡ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ (ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΠ°ΠΊΠΎΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, ΠΊΠ°ΠΊ pre-commit ΠΈΠ»ΠΈ husky, Π΄Π»Ρ ΠΈΡ
ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ).
ΠΠ»ΡΡΠ΅Π²ΡΠ΅ Ρ ΡΠΊΠΈ Π΄Π»Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π½ΡΡ ΡΠ°Π±ΠΎΡΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ²:
| Π₯ΡΠΊ | Π’ΡΠΈΠ³Π³Π΅Ρ | Π’ΠΈΠΏΠΈΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ |
|---|---|---|
| `pre-commit` | ΠΠ΅ΡΠ΅Π΄ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠΌΠΌΠΈΡΠ° | ΠΠ°ΠΏΡΡΠΊ Π»ΠΈΠ½ΡΠ΅ΡΠΎΠ², ΡΠΎΡΠΌΠ°ΡΡΠ΅ΡΠΎΠ², ΡΠ΅ΡΡΠΎΠ² |
| `commit-msg` | ΠΠΎΡΠ»Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠΌΠΌΠΈΡΠ° | Π‘ΠΎΠ±Π»ΡΠ΄Π΅Π½ΠΈΠ΅ ΡΠΎΡΠΌΠ°ΡΠ° conventional commit |
| `pre-push` | ΠΠ΅ΡΠ΅Π΄ push Π½Π° ΡΠ΄Π°Π»ΡΠ½Π½ΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ | ΠΠ°ΠΏΡΡΠΊ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡΠ° ΡΠ΅ΡΡΠΎΠ² |
| `post-receive` | ΠΠΎΡΠ»Π΅ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ push ΡΠ΄Π°Π»ΡΠ½Π½ΡΠΌ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ | ΠΠ°ΠΏΡΡΠΊ ΡΠ°Π·Π²ΡΡΡΡΠ²Π°Π½ΠΈΡ, ΠΎΡΠΏΡΠ°Π²ΠΊΠ° ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ |
| `pre-rebase` | ΠΠ΅ΡΠ΅Π΄ Π½Π°ΡΠ°Π»ΠΎΠΌ rebase | ΠΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ΅Π½ΠΈΠ΅ rebase ΠΎΠ±ΡΠΈΡ Π²Π΅ΡΠΎΠΊ |
# Example pre-commit hook: reject commits with debug print statements
#!/bin/bash
if git diff --cached | grep -E '^+.*(console.log|debugger|print("DEBUG)'; then
echo "ERROR: Debug statement detected. Remove before committing."
exit 1
fiΠ₯ΡΠΊ post-receive Π½Π° Π³ΠΎΠ»ΠΎΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠΌ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ β ΠΎΡΠ½ΠΎΠ²Π° ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΡΠ°Π·Π²ΡΡΡΡΠ²Π°Π½ΠΈΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Git: push Π½Π° ΡΠ΅ΡΠ²Π΅Ρ, Ρ
ΡΠΊ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ Π½ΠΎΠ²ΡΠΉ HEAD Π² ΠΊΠΎΡΠ΅Π½Ρ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅ΡΠ°, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠ°Π³ΠΈ ΡΠ±ΠΎΡΠΊΠΈ ΠΈ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΡΠ΅ΡΠ²ΠΈΡΡ β Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π²ΠΎ Π²Π½Π΅ΡΠ½Π΅ΠΉ CI-ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅.
.gitignore: ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅ ΡΠΈΡΡΠΎΡΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠ΅Π²
Π€Π°ΠΉΠ» .gitignore ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Git, ΠΊΠ°ΠΊΠΈΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΈ ΡΠ°Π±Π»ΠΎΠ½Ρ ΠΎΡΡΠ°Π²Π»ΡΡΡ Π½Π΅ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅ΠΌΡΠΌΠΈ. ΠΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π·Π°ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ ΠΈ ΡΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ.
# Dependencies
node_modules/
vendor/
# Build artifacts
dist/
build/
*.o
*.pyc
__pycache__/
# Environment and secrets β NEVER commit these
.env
.env.local
*.pem
*.key
config/secrets.yml
# IDE files
.idea/
.vscode/
*.swp
# OS files
.DS_Store
Thumbs.dbΠΡΠΈΡΠΈΡΠ΅ΡΠΊΠ°Ρ Π»ΠΎΠ²ΡΡΠΊΠ°: Π΅ΡΠ»ΠΈ ΡΠ°ΠΉΠ» ΡΠΆΠ΅ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π»ΡΡ Π΄ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π² .gitignore, Git ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ Π΅Π³ΠΎ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ. ΠΠ΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ²Π½ΠΎ ΠΏΡΠ΅ΠΊΡΠ°ΡΠΈΡΡ Π΅Π³ΠΎ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅:
git rm --cached path/to/sensitive-file
git commit -m "chore: stop tracking secrets file"ΠΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡΠΈΠΊΡΠΈΡΡΠΉΡΠ΅ ΡΡΡΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, API-ΠΊΠ»ΡΡΠΈ ΠΈΠ»ΠΈ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠ΅ ΠΊΠ»ΡΡΠΈ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ β Π΄Π°ΠΆΠ΅ Π² ΠΏΡΠΈΠ²Π°ΡΠ½ΠΎΠΌ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ, ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΡ ΡΠ΅ΠΊΡΠ΅ΡΠΎΠ² (HashiCorp Vault, AWS Secrets Manager) ΠΈΠ»ΠΈ ΡΠ°ΠΉΠ»Ρ .env, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΡΠ΅ Π² .gitignore.
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π΄Π»Ρ Π±ΠΎΠ»ΡΡΠΈΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠ΅Π²
Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Git Π΄Π΅Π³ΡΠ°Π΄ΠΈΡΡΠ΅Ρ Π½Π° ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡΡ Ρ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Π°ΠΌΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈΠ»ΠΈ Π³ΠΈΠ³Π°Π±Π°ΠΉΡΠ°ΠΌΠΈ Π±ΠΈΠ½Π°ΡΠ½ΡΡ ΡΠ΅ΡΡΡΡΠΎΠ². Π‘ΡΡΠ°ΡΠ΅Π³ΠΈΠΈ ΡΠΌΡΠ³ΡΠ΅Π½ΠΈΡ:
- Git LFS (Large File Storage): Π·Π°ΠΌΠ΅Π½ΡΠ΅Ρ Π±ΠΎΠ»ΡΡΠΈΠ΅ Π±ΠΈΠ½Π°ΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ-ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠΌΠΈ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ ΠΈ Ρ ΡΠ°Π½ΠΈΡ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Π½Π° ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ LFS-ΡΠ΅ΡΠ²Π΅ΡΠ΅. ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ Π΄Π»Ρ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠ΅Π², ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΡ ΠΌΠ΅Π΄ΠΈΠ°ΡΠ°ΠΉΠ»Ρ, Π²Π΅ΡΠ° ML-ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΈΠ»ΠΈ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π±ΠΈΠ½Π°ΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ.
- Π§Π°ΡΡΠΈΡΠ½ΠΎΠ΅ ΠΊΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅:
git clone --filter=blob:noneΠ·Π°Π³ΡΡΠΆΠ°Π΅Ρ ΠΊΠΎΠΌΠΌΠΈΡΡ ΠΈ Π΄Π΅ΡΠ΅Π²ΡΡ, Π½ΠΎ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ blob-ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΏΠΎ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ. ΠΠ½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΌΠ΅Π½ΡΡΠ°Π΅Ρ Π½Π°ΡΠ°Π»ΡΠ½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΠΊΠ»ΠΎΠ½Π° Π΄Π»Ρ Π±ΠΎΠ»ΡΡΠΈΡ ΠΌΠΎΠ½ΠΎΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠ΅Π². - Sparse checkout:
git sparse-checkout set path/to/subdirΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ°Π±ΠΎΡΠ΅Π³ΠΎ Π΄Π΅ΡΠ΅Π²Π°. ΠΠΎΠ»Π΅Π·Π½ΠΎ Π² ΠΌΠΎΠ½ΠΎΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡΡ , Π³Π΄Π΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΎΠ΄Π½ΠΎΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ ΡΠ΅ΡΠ²ΠΈΡΠ°. - Π€Π°ΠΉΠ» commit-graph:
git commit-graph write --reachableΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π²ΡΡΠΈΡΠ»ΡΠ΅Ρ Π³ΡΠ°Ρ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ², ΡΡΠΊΠΎΡΡΡ ΡΠ°ΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΊΠ°ΠΊgit log --graphΠΈ Π·Π°ΠΏΡΠΎΡΡ Π΄ΠΎΡΡΠΈΠΆΠΈΠΌΠΎΡΡΠΈ Π² Π±ΠΎΠ»ΡΡΠΈΡ ΠΈΡΡΠΎΡΠΈΡΡ . git maintenance start: ΠΏΠ»Π°Π½ΠΈΡΡΠ΅Ρ ΡΠΎΠ½ΠΎΠ²ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΡ (ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠ° ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ commit-graph, ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½Π°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° fetch) Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠ°Π½ΠΈΡ Π±ΡΡΡΡΠΎΠΉ ΡΠ°Π±ΠΎΡΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ ΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ.
Π’Π΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΊΠ»ΡΡΠ΅Π²ΡΡ Π²ΡΠ²ΠΎΠ΄ΠΎΠ²
ΠΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΡΡΠΈΡΠ°ΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΡ Git Π³ΠΎΡΠΎΠ²ΠΎΠΉ ΠΊ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Ρ, ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΏΡΠ½ΠΊΡΠΎΠ²:
- ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π½Π°ΡΡΡΠΎΠ΅Π½Π°:
user.nameΠΈuser.emailΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ Π½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΌ ΡΡΠΎΠ²Π½Π΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ - ΠΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ SSH-ΠΊΠ»ΡΡΠΈ: Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΏΠΎ ΠΏΠ°ΡΠΎΠ»Ρ ΠΊ ΡΠ΄Π°Π»ΡΠ½Π½ΡΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ°ΠΌ Π·Π°ΠΌΠ΅Π½Π΅Π½Π° ΠΏΠ°ΡΠ°ΠΌΠΈ SSH-ΠΊΠ»ΡΡΠ΅ΠΉ ΠΈΠ»ΠΈ HTTPS Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠΎΠΊΠ΅Π½ΠΎΠ²
.gitignoreΠ·Π°ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½: ΡΠ΅ΠΊΡΠ΅ΡΡ, Π°ΡΡΠ΅ΡΠ°ΠΊΡΡ ΡΠ±ΠΎΡΠΊΠΈ ΠΈ ΡΠ°ΠΉΠ»Ρ ΠΠ‘ ΠΈΡΠΊΠ»ΡΡΠ΅Π½Ρ Π΄ΠΎ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡΠ°- ΠΠ΅ΡΠΊΠ° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ
main:init.defaultBranchΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎ Π²ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ ΡΡΡΠ°ΡΠ΅Π²ΡΠ΅Π³ΠΎ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΡmaster - Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ² ΡΠ»Π΅Π΄ΡΡΡ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ: Conventional Commits (
feat:,fix:,chore:) ΠΈΠ»ΠΈ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΡΠΎΡΠΌΠ°Ρ, ΡΠΎΠ±Π»ΡΠ΄Π°Π΅ΠΌΡΠΉ ΡΠ΅ΡΠ΅Π· Ρ ΡΠΊcommit-msg git revertΠ΄Π»Ρ ΠΏΡΠ±Π»ΠΈΡΠ½ΠΎΠΉ ΠΈΡΡΠΎΡΠΈΠΈ:git reset --hardΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ , Π½Π΅ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΡ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ²--force-with-leaseΠ²ΠΌΠ΅ΡΡΠΎ--force: ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°Π΅Ρ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΡ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΡ push ΠΊΠΎΠ»Π»Π΅Π³- ΠΠ½Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ΅Π³ΠΈ Π΄Π»Ρ ΡΠ΅Π»ΠΈΠ·ΠΎΠ²:
git tag -aΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΠΌ, Π° Π½Π΅ Π»ΡΠ³ΠΊΠΈΠ΅ ΡΠ΅Π³ΠΈ - Π₯ΡΠΊΠΈ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΡΡΡΡ ΡΠ΅ΡΠ΅Π·
pre-commitΠΈΠ»ΠΈhusky: ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΠΊΠ°ΡΠ΅ΡΡΠ²Π° ΡΠΎΠ±Π»ΡΠ΄Π°Π΅ΡΡΡ Π΅Π΄ΠΈΠ½ΠΎΠΎΠ±ΡΠ°Π·Π½ΠΎ Π²ΠΎ Π²ΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ - Git LFS Π½Π°ΡΡΡΠΎΠ΅Π½, Π΅ΡΠ»ΠΈ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π±ΠΈΠ½Π°ΡΠ½ΡΠ΅ ΡΠ΅ΡΡΡΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ Π±ΠΎΠ»Π΅Π΅ 1 MB
- ΠΠΎΠ»ΡΠΉ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅: ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΡΠ½Π½ΡΠ΅ ΡΠ΄Π°Π»ΡΠ½Π½ΡΠ΅ ΡΠ΅ΡΠ²Π΅ΡΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ
git init --bare - Π Π΅Π³ΡΠ»ΡΡΠ½ΡΠΉ
git fetch --prune: Π²Π΅ΡΠΊΠΈ ΡΠ΄Π°Π»ΡΠ½Π½ΠΎΠ³ΠΎ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Ρ Ρ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ΠΌ ΡΠ΄Π°Π»ΡΠ½Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ°
Π§Π°ΡΡΠΎ Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ
Π ΡΡΠΌ ΡΠ°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ git fetch ΠΈ git pull?
git fetch Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ ΠΊΠΎΠΌΠΌΠΈΡΡ, Π²Π΅ΡΠΊΠΈ ΠΈ ΡΠ΅Π³ΠΈ Ρ ΡΠ΄Π°Π»ΡΠ½Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ° Π² Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ refs ΡΠ΄Π°Π»ΡΠ½Π½ΠΎΠ³ΠΎ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, origin/main), Π½Π΅ Π·Π°ΡΡΠ°Π³ΠΈΠ²Π°Ρ ΡΠ°Π±ΠΎΡΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ ΠΈΠ»ΠΈ ΡΠ΅ΠΊΡΡΡΡ Π²Π΅ΡΠΊΡ. git pull β ΡΡΠΎ git fetch, Π·Π° ΠΊΠΎΡΠΎΡΡΠΌ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ git merge (ΠΈΠ»ΠΈ git rebase, Π΅ΡΠ»ΠΈ Π½Π°ΡΡΡΠΎΠ΅Π½ΠΎ). ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ git fetch, ΠΊΠΎΠ³Π΄Π° Ρ
ΠΎΡΠΈΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΈΠ· upstream ΠΏΠ΅ΡΠ΅Π΄ ΠΈΡ
ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠ΅ΠΉ.
ΠΠΎΠ³Π΄Π° ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ git rebase Π²ΠΌΠ΅ΡΡΠΎ git merge?
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ rebase Π΄Π»Ρ Π»ΠΈΠ½Π΅Π°ΡΠΈΠ·Π°ΡΠΈΠΈ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ Π²Π΅ΡΠΊΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠ΅ΡΠ΅Π΄ ΠΎΡΠΊΡΡΡΠΈΠ΅ΠΌ pull request, ΡΠΎΡ ΡΠ°Π½ΡΡ ΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΡ ΠΈΡΡΠΎΡΠΈΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°. ΠΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΠΉΡΠ΅ rebase Π²Π΅ΡΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΠΆΠ΅ ΠΊΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°Π»ΠΈ ΠΈΠ»ΠΈ Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΡΠ½ΠΎΠ²Π°Π»ΠΈ ΡΠ²ΠΎΡ ΡΠ°Π±ΠΎΡΡ β ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΡ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½ΡΡ Ρ Π΅ΡΠ΅ΠΉ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ² Π²ΡΠ½ΡΠΆΠ΄Π°Π΅Ρ Π²ΡΠ΅Ρ ΠΎΡΡΠ°Π»ΡΠ½ΡΡ Π²ΡΡΡΠ½ΡΡ ΡΠΎΠ³Π»Π°ΡΠΎΠ²ΡΠ²Π°ΡΡ ΡΠ°ΡΡ ΠΎΠ΄ΡΡΠΈΠ΅ΡΡ ΠΈΡΡΠΎΡΠΈΠΈ.
ΠΠ°ΠΊ Π½Π°Π²ΡΠ΅Π³Π΄Π° ΡΠ΄Π°Π»ΠΈΡΡ ΠΊΠΎΠ½ΡΠΈΠ΄Π΅Π½ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΡΠ°ΠΉΠ», ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ Π·Π°ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π² ΠΊΠΎΠΌΠΌΠΈΡΠ΅?
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ git filter-repo (ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π·Π°ΠΌΠ΅Π½Π° git filter-branch): git filter-repo --path secrets.env --invert-paths. ΠΡΠΎ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ Π²ΡΡ ΠΈΡΡΠΎΡΠΈΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ, ΡΠ΄Π°Π»ΡΡ ΡΠ°ΠΉΠ» ΠΈΠ· ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡΠ°. ΠΠΎΡΠ»Π΅ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ push Π²ΡΠ΅Ρ
Π²Π΅ΡΠΎΠΊ ΠΈ ΡΠ΅Π³ΠΎΠ², Π·Π°ΡΠ΅ΠΌ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΡΠΌΠ΅Π½ΠΈΡΠ΅ ΡΠΊΠΎΠΌΠΏΡΠΎΠΌΠ΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΡΡΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ β ΡΡΠΈΡΠ°ΠΉΡΠ΅ ΠΈΡ
ΡΠ°ΡΠΊΡΡΡΡΠΌΠΈ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠΎΠ³ΠΎ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ Π±ΡΡΡΡΠΎ Π²Ρ Π΄Π΅ΠΉΡΡΠ²ΡΠ΅ΡΠ΅.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ detached HEAD ΠΈ ΠΊΠ°ΠΊ ΠΈΠ· Π½Π΅Π³ΠΎ Π²ΡΠΉΡΠΈ?
Detached HEAD ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ HEAD ΡΡΡΠ»Π°Π΅ΡΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π½Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ Ρ
Π΅Ρ ΠΊΠΎΠΌΠΌΠΈΡΠ°, Π° Π½Π΅ Π½Π° ΠΈΠΌΡ Π²Π΅ΡΠΊΠΈ. ΠΡΠ±ΡΠ΅ ΠΊΠΎΠΌΠΌΠΈΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ Π΄Π΅Π»Π°Π΅ΡΠ΅, Π½Π΅ Π±ΡΠ΄ΡΡ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°ΡΡ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΉ Π²Π΅ΡΠΊΠ΅ ΠΈ ΡΡΠ°Π½ΡΡ Π½Π΅Π΄ΠΎΡΡΠΈΠΆΠΈΠΌΡΠΌΠΈ ΠΏΠΎΡΠ»Π΅ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ. ΠΠ»Ρ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ: git switch -c new-branch-name Π΄Π»Ρ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ² ΠΊ Π½ΠΎΠ²ΠΎΠΉ Π²Π΅ΡΠΊΠ΅ ΠΈΠ»ΠΈ git switch main Π΄Π»Ρ ΠΈΡ
ΠΎΡΠΌΠ΅Π½Ρ.
ΠΠ°ΠΊ Git ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ Π±ΠΈΠ½Π°ΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΈΠ½Π°ΡΠ΅, ΡΠ΅ΠΌ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠ΅?
Git Ρ ΡΠ°Π½ΠΈΡ Π±ΠΈΠ½Π°ΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΊΠ°ΠΊ Π½Π΅ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΡΠ΅ blob-ΠΎΠ±ΡΠ΅ΠΊΡΡ β ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΡΠΈΡΠ»ΡΡΡ Π·Π½Π°ΡΠΈΠΌΡΠ΅ ΠΏΠΎΡΡΡΠΎΡΠ½ΡΠ΅ Π΄ΠΈΡΡΡ ΠΈΠ»ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ»ΠΈΡΠ½ΠΈΡ Π΄Π»Ρ Π½ΠΈΡ . ΠΠΎΠ½ΡΠ»ΠΈΠΊΡΡ Π² Π±ΠΈΠ½Π°ΡΠ½ΡΡ ΡΠ°ΠΉΠ»Π°Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ°Π·ΡΠ΅ΡΠ°ΡΡΡΡ ΠΏΡΡΡΠΌ Π²ΡΠ±ΠΎΡΠ° ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π²Π΅ΡΡΠΈΠΉ ΡΠ΅Π»ΠΈΠΊΠΎΠΌ. ΠΠ»Ρ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠ΅Π² ΡΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ Π±ΠΈΠ½Π°ΡΠ½ΡΠΌΠΈ ΡΠ΅ΡΡΡΡΠ°ΠΌΠΈ Π½Π°ΡΡΡΠΎΠΉΡΠ΅ Git LFS Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π±ΠΈΠ½Π°ΡΠ½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π²ΠΎ Π²Π½Π΅ΡΠ½Π΅ΠΌ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅, ΡΠΎΡ ΡΠ°Π½ΡΡ ΡΠ°ΠΌ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ Π»ΡΠ³ΠΊΠΈΠΌ ΠΈ Π±ΡΡΡΡΡΠΌ.
Π½Π° Π²ΡΠ΅Ρ
Ρ
ΠΎΡΡΠΈΠ½Π³ΠΎΠ²ΡΡ
ΡΡΠ»ΡΠ³Π°Ρ