БпСстСтС 15% ΠΎΡ‚ всички хостинг услуги

ВСствай умСнията си ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈ ΠžΡ‚ΡΡ‚ΡŠΠΏΠΊΠ° Π·Π° всСки хостинг ΠΏΠ»Π°Π½

Π˜Π·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ ΠΊΠΎΠ΄: Skills Π—Π° Π½Π°Ρ‡Π°Π»ΠΎ
Заглавия
Linux

Git ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ» Π½Π° вСрсиитС: ΠŸΡŠΠ»Π½ΠΎΡ‚ΠΎ тСхничСско Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ

Git Π΅ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° систСма Π·Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ» Π½Π° вСрсиитС (DVCS), която записва снимки Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΡ‚ΠΎ Π΄ΡŠΡ€Π²ΠΎ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ с Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π½Π° Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ, позволявайки Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½ Π±Ρ€ΠΎΠΉ ΡΡŠΡ‚Ρ€ΡƒΠ΄Π½ΠΈΡ†ΠΈ Π΄Π° работят ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ, Π±Π΅Π· Π΄Π° прСзаписват Π²Π·Π°ΠΈΠΌΠ½ΠΎ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ си. ВсСки Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΏΡ€ΠΈΡ‚Π΅ΠΆΠ°Π²Π° пълно ΠΊΠΎΠΏΠΈΠ΅ Π½Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ β€” Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ цялата история Π½Π° ΠΊΠΎΠΌΠΈΡ‚ΠΈΡ‚Π΅ β€” Π½Π° Π»ΠΎΠΊΠ°Π»Π½Π°Ρ‚Π° си машина, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡ€Π° Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½Π°Ρ‚Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° ΠΎΡ‚ΠΊΠ°Π· ΠΈ позволява напълно ΠΎΡ„Π»Π°ΠΉΠ½ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈ процСси.

БъздадСн ΠΎΡ‚ Linus Torvalds ΠΏΡ€Π΅Π· Π°ΠΏΡ€ΠΈΠ» 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)

Π“ΠΎΠ»ΠΎΡ‚ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° само ΠΎΠ±Π΅ΠΊΡ‚Π½ΠΎΡ‚ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΈ Ρ€Π΅Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈΡ‚Π΅ β€” Π±Π΅Π· Ρ€Π°Π±ΠΎΡ‚Π½Π° дирСктория. Π’ΠΎΠ²Π° Π΅ правилният Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π·Π° ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, към ΠΊΠΎΠ΅Ρ‚ΠΎ мноТСство Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Ρ‚ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ. Ако самостоятСлно хостватС Git Π½Π° ΡΡŠΡ€Π²ΡŠΡ€ с VPS Π₯остинг, Π²ΠΈΠ½Π°Π³ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°ΠΉΡ‚Π΅ сподСлСнитС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° ΠΊΠ°Ρ‚ΠΎ Π³ΠΎΠ»ΠΈ.

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 info

git 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 only

git 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 ΠΈΠ»ΠΈ Π΄Π° Π½ΡƒΠ»ΠΈΡ€Π°Ρ‚ Π»ΠΎΠΊΠ°Π»Π½ΠΈΡ‚Π΅ си ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅.

Π˜Π·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ ΠΈ изтСглянС

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 ΠΊΠΎΠ³Π°Ρ‚ΠΎ трябва Π΄Π° ΠΏΡ€Π΅Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½Π°Ρ‚Π° история. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ²Π° Π΄Π°Π»ΠΈ Π½ΠΈΠΊΠΎΠΉ Π΄Ρ€ΡƒΠ³ Π½Π΅ Π΅ ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈΠ» ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ слСд послСдното Π²ΠΈ ΠΈΠ·Π²Π»ΠΈΡ‡Π°Π½Π΅, прСдотвратявайки случайна Π·Π°Π³ΡƒΠ±Π° Π½Π° Π΄Π°Π½Π½ΠΈ.

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 created

git fetch изтСгля ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ, Π±Π΅Π· Π΄Π° засяга Ρ€Π°Π±ΠΎΡ‚Π½Π°Ρ‚Π° Π²ΠΈ дирСктория ΠΈΠ»ΠΈ тСкущия ΠΊΠ»ΠΎΠ½. Π’ΠΎΠ²Π° Π΅ бСзопасният Π½Π°Ρ‡ΠΈΠ½ Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π½Π°Π³ΠΎΡ€Π΅ ΠΏΠΎ Π²Π΅Ρ€ΠΈΠ³Π°Ρ‚Π° ΠΏΡ€Π΅Π΄ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ ΠΈΠΌ.

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

Π‘ΡŠΡ€Π·ΠΎΡ‚ΠΎ сливанС Π½Π°ΠΏΡ€Π΅Π΄ сС случва, ΠΊΠΎΠ³Π°Ρ‚ΠΎ цСлСвият ΠΊΠ»ΠΎΠ½ Π½Π΅ сС Π΅ Ρ€Π°Π·ΠΊΠ»ΠΎΠ½ΠΈΠ» ΠΎΡ‚ изходния β€” Git просто прСмСства указатСля Π½Π°ΠΏΡ€Π΅Π΄. НС сС създава ΠΊΠΎΠΌΠΈΡ‚ Π·Π° сливанС. --no-ff ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»Π½ΠΎ създава ΠΊΠΎΠΌΠΈΡ‚ Π·Π° сливанС Π΄ΠΎΡ€ΠΈ Π² Ρ‚ΠΎΠ·ΠΈ случай, ΠΊΠΎΠ΅Ρ‚ΠΎ Π·Π°ΠΏΠ°Π·Π²Π° Π²ΠΈΠ·ΡƒΠ°Π»Π½Π°Ρ‚Π° история Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π½ΠΈΡ‚Π΅ ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅ Π² git log --graph.

Π‘Π»ΠΈΠ²Π°Π½Π΅Ρ‚ΠΎ Ρ‡Ρ€Π΅Π· ΡΠ³ΡŠΡΡ‚ΡΠ²Π°Π½Π΅ свива всички ΠΊΠΎΠΌΠΈΡ‚ΠΈ ΠΎΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π΅Π½ ΠΊΠ»ΠΎΠ½ Π² Π΅Π΄Π½Π° ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²Π΅Π½Π° промяна, която слСд Ρ‚ΠΎΠ²Π° Ρ€ΡŠΡ‡Π½ΠΎ ΠΊΠΎΠΌΠΈΡ‚Π²Π°Ρ‚Π΅. Π’ΠΎΠ²Π° ΠΏΡ€ΠΎΠΈΠ·Π²Π΅ΠΆΠ΄Π° чиста Π»ΠΈΠ½Π΅ΠΉΠ½Π° история Π² main, Π½ΠΎ ΠΎΡ‚Ρ…Π²ΡŠΡ€Π»Ρ Π΄Π΅Ρ‚Π°ΠΉΠ»Π½Π°Ρ‚Π° история Π½Π° ΠΊΠΎΠΌΠΈΡ‚ΠΈΡ‚Π΅ Π½Π° функционалния ΠΊΠ»ΠΎΠ½.

ΠŸΡ€Π΅Π±Π°Π·ΠΈΡ€Π°Π½Π΅

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

Π˜Π½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΡ‚ΠΎ ΠΏΡ€Π΅Π±Π°Π·ΠΈΡ€Π°Π½Π΅ (-i) Π΅ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ΡŠΡ‚ Π·Π° Ρ…ΠΈΠ³ΠΈΠ΅Π½Π° Π½Π° ΠΊΠΎΠΌΠΈΡ‚ΠΈΡ‚Π΅ Π½Π° профСсионалиста. Позволява Π²ΠΈ Π΄Π° ΠΏΡ€Π΅Π½Π°Ρ€Π΅ΠΆΠ΄Π°Ρ‚Π΅, ΡΠ³ΡŠΡΡ‚ΡΠ²Π°Ρ‚Π΅, Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€Π°Ρ‚Π΅, ΠΏΡ€Π΅ΠΌΠ°Ρ…Π²Π°Ρ‚Π΅ ΠΈΠ»ΠΈ раздСлятС ΠΊΠΎΠΌΠΈΡ‚ΠΈ ΠΏΡ€Π΅Π΄ΠΈ сподСлянСто ΠΈΠΌ. ЧСста ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°: почистванС Π½Π° ΠΎΠ±ΡŠΡ€ΠΊΠ°Π½ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π΅Π½ ΠΊΠ»ΠΎΠ½ ΠΏΡ€Π΅Π΄ΠΈ отварянС Π½Π° заявка Π·Π° сливанС.

Π‘Ρ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡΠ˜ΡΡ‚ΠΎΡ€ΠΈΡΠ‘Π»ΡƒΡ‡Π°ΠΉ Π½Π° употрСбаРиск
Π‘Π»ΠΈΠ²Π°Π½Π΅ (ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅)НСлинСйна, Π·Π°ΠΏΠ°Π·Π²Π° ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅Ρ‚Π΅Π”ΡŠΠ»Π³ΠΎΡ‚Ρ€Π°ΠΉΠ½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π½ΠΈ ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅Π¨ΡƒΠΌΠ΅Π½ `git log`
Π‘Π»ΠΈΠ²Π°Π½Π΅ `–no-ff`НСлинСйна, явни ΠΊΠΎΠΌΠΈΡ‚ΠΈ Π·Π° сливанСНалоТСна топология Π½Π° ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅Ρ‚Π΅Π‘ΡŠΡ‰ΠΎΡ‚ΠΎ ΠΊΠ°Ρ‚ΠΎ ΠΏΠΎ-Π³ΠΎΡ€Π΅
Π‘Π»ΠΈΠ²Π°Π½Π΅ `–squash`Π›ΠΈΠ½Π΅ΠΉΠ½Π°, Π΅Π΄ΠΈΠ½ ΠΊΠΎΠΌΠΈΡ‚ Π½Π° функцияЧист основСн ΠΊΠ»ΠΎΠ½Π“ΡƒΠ±ΠΈ Π΄Π΅Ρ‚Π°ΠΉΠ»Π½Π°Ρ‚Π° история
RebaseΠ›ΠΈΠ½Π΅ΠΉΠ½Π°, Π±Π΅Π· ΠΊΠΎΠΌΠΈΡ‚ΠΈ Π·Π° сливанСЛични ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅, почистванС ΠΏΡ€Π΅Π΄ΠΈ PRΠŸΡ€Π΅Π·Π°ΠΏΠΈΡΠ²Π° Ρ…Π΅ΡˆΠΎΠ²Π΅; опасно ΠΏΡ€ΠΈ сподСлСни ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅
Cherry-pickΠ˜Π·Π±ΠΈΡ€Π°Ρ‚Π΅Π»Π½Π°, Π»ΠΈΠ½Π΅ΠΉΠ½Π°ΠŸΡ€Π΅Π½Π°ΡΡΠ½Π΅ Π½Π° ΠΏΠΎΠΏΡ€Π°Π²ΠΊΠΈ Π½Π°Π·Π°Π΄Π”ΡƒΠ±Π»ΠΈΡ€Π°Π½ΠΈ ΠΊΠΎΠΌΠΈΡ‚ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅

Π—Π»Π°Ρ‚Π½ΠΎΡ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π½Π° ΠΏΡ€Π΅Π±Π°Π·ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ: Никога Π½Π΅ ΠΏΡ€Π΅Π±Π°Π·ΠΈΡ€Π°ΠΉΡ‚Π΅ ΠΊΠΎΠΌΠΈΡ‚ΠΈ, ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈ Π² ΠΏΡƒΠ±Π»ΠΈΡ‡Π΅Π½, сподСлСн ΠΊΠ»ΠΎΠ½. ΠŸΡ€Π΅Π±Π°Π·ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ прСзаписва Ρ…Π΅ΡˆΠΎΠ²Π΅Ρ‚Π΅ Π½Π° ΠΊΠΎΠΌΠΈΡ‚ΠΈΡ‚Π΅. Ако ΠΊΠΎΠ»Π΅Π³Π° Π΅ Π±Π°Π·ΠΈΡ€Π°Π» Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° си Π²ΡŠΡ€Ρ…Ρƒ Ρ‚Π΅Π·ΠΈ ΠΊΠΎΠΌΠΈΡ‚ΠΈ, историята ΠΌΡƒ Ρ‰Π΅ сС Ρ€Π°Π·ΠΊΠ»ΠΎΠ½ΠΈ ΠΈ Ρ‚ΠΎΠΉ Ρ‰Π΅ сС ΠΈΠ·ΠΏΡ€Π°Π²ΠΈ ΠΏΡ€Π΅Π΄ Π±ΠΎΠ»Π΅Π·Π½Π΅Π½ΠΎ ΡΡŠΠ³Π»Π°ΡΡƒΠ²Π°Π½Π΅.

Π Π°Π·Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΈ ΠΏΡ€ΠΈ сливанС

ΠšΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΈ Π²ΡŠΠ·Π½ΠΈΠΊΠ²Π°Ρ‚, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π΄Π²Π° ΠΊΠ»ΠΎΠ½Π° ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Ρ‚ Π΅Π΄Π½ΠΎ ΠΈ ΡΡŠΡ‰ΠΎ място Π² Π΅Π΄ΠΈΠ½ ΠΈ ΡΡŠΡ‰ΠΈ Ρ„Π°ΠΉΠ». 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 stash

git 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 commits

Cherry-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

Π’ΠΈΠ½Π°Π³ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ Π°Π½ΠΎΡ‚ΠΈΡ€Π°Π½ΠΈ Ρ‚Π°Π³ΠΎΠ²Π΅ Π·Π° издания. Π’Π΅ ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚ ΠΈΠΌΠ΅Ρ‚ΠΎ, ΠΈΠΌΠ΅ΠΉΠ»Π°, Π΄Π°Ρ‚Π°Ρ‚Π° ΠΈ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° маркиращия, ΠΈ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ подписани с GPG. Π›Π΅ΠΊΠΈΡ‚Π΅ Ρ‚Π°Π³ΠΎΠ²Π΅ са подходящи само Π·Π° Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΈ Π»ΠΎΠΊΠ°Π»Π½ΠΈ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΠΈ.

git worktree

git worktree позволява Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΡ‚ΠΎ ΠΈΠ·Π²Π»ΠΈΡ‡Π°Π½Π΅ Π½Π° мноТСство Ρ€Π°Π±ΠΎΡ‚Π½ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ ΠΎΡ‚ Π΅Π΄Π½ΠΎ ΠΈ ΡΡŠΡ‰ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ β€” всяка Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½ ΠΊΠ»ΠΎΠ½. Π’ΠΎΠ²Π° Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡ€Π° нСобходимостта ΠΎΡ‚ Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΈΡ‚Π²Π°Π½Π΅ Π½Π° Π½Π΅Π·Π°Π²ΡŠΡ€ΡˆΠ΅Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ трябва Π΄Π° ΠΏΡ€Π΅Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ към спСшна ΠΏΠΎΠΏΡ€Π°Π²ΠΊΠ°.

git worktree add ../hotfix-branch hotfix/critical-auth-bug
git worktree list
git worktree remove ../hotfix-branch

Π’ΠΎΠ²Π° Π΅ особСно Ρ†Π΅Π½Π½ΠΎ Π½Π° Dedicated Server, ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‰ CI/CD ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ мноТСство Π·Π°Π΄Π°Ρ‡ΠΈ Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ сС нуТдаят ΠΎΡ‚ Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π΅Π½ Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅ Π½Π° Π΅Π΄Π½ΠΎ ΠΈ ΡΡŠΡ‰ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, Π±Π΅Π· Π΄Π° си ΠΏΡ€Π΅Ρ‡Π°Ρ‚ Π²Π·Π°ΠΈΠΌΠ½ΠΎ.

Git Ρ€Π°Π±ΠΎΡ‚Π½ΠΈ процСси Π·Π° Π΅ΠΊΠΈΠΏΠΈ

ΠŸΡ€Π°Π²ΠΈΠ»Π½Π°Ρ‚Π° стратСгия Π·Π° разклоняванС зависи ΠΎΡ‚ Ρ€ΠΈΡ‚ΡŠΠΌΠ° Π½Π° ΠΈΠ·Π΄Π°Π²Π°Π½Π΅ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π° Π΅ΠΊΠΈΠΏΠ°. Π‘ΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‚ Ρ‚Ρ€ΠΈ Π΄ΠΎΠΌΠΈΠ½ΠΈΡ€Π°Ρ‰ΠΈ ΠΌΠΎΠ΄Π΅Π»Π°:

Π Π°Π±ΠΎΡ‚Π΅Π½ процСс с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π½ΠΈ ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅

Всяка функция ΠΈΠ»ΠΈ ΠΏΠΎΠΏΡ€Π°Π²ΠΊΠ° ΠΆΠΈΠ²Π΅Π΅ Π² собствСн ΠΊΠ»ΠΎΠ½. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ отварят заявки Π·Π° сливанС към main. ΠŸΡ€ΠΎΡΡ‚, Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π΅Π½ Π·Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ Π΅ΠΊΠΈΠΏΠΈ.

Gitflow

Π”Π΅Ρ„ΠΈΠ½ΠΈΡ€Π° Π΄ΡŠΠ»Π³ΠΎΡ‚Ρ€Π°ΠΉΠ½ΠΈ ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅ main ΠΈ develop, плюс ΠΊΡ€Π°Ρ‚ΠΊΠΎΡ‚Ρ€Π°ΠΉΠ½ΠΈ ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅ feature/, release/ ΠΈ hotfix/ със строги ΠΏΡ€Π°Π²ΠΈΠ»Π° Π·Π° сливанС. ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ΡΡ‰ Π·Π° софтуСр с явни вСрсионирани издания (Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈΡ€Π°Π½ΠΈ прилоТСния).

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, Π±Π°Π·ΠΈΡ€Π°Π½Π° Π½Π° основния ΠΊΠ»ΠΎΠ½

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΈΡ‚Π²Π°Ρ‚ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π² main (ΠΈΠ»ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΡ€Π°Ρ‚ΠΊΠΎΡ‚Ρ€Π°ΠΉΠ½ΠΈ ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅, слСти Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° Π΄Π΅Π½). Π Π°Π·Ρ‡ΠΈΡ‚Π° Π² голяма стСпСн Π½Π° Ρ„Π»Π°Π³ΠΎΠ²Π΅ Π·Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π·Π° Π΄Π° скриС Π½Π΅Π·Π°Π²ΡŠΡ€ΡˆΠ΅Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°. ΠŸΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π½ ΠΎΡ‚ Π΅ΠΊΠΈΠΏΠΈ с висока скорост, ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΡƒΠ²Π°Ρ‰ΠΈ Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚ΠΎ внСдряванС.

Π Π°Π±ΠΎΡ‚Π΅Π½ ΠΏΡ€ΠΎΡ†Π΅ΡΠ ΠΈΡ‚ΡŠΠΌ Π½Π° ΠΈΠ·Π΄Π°Π²Π°Π½Π΅Π Π°Π·ΠΌΠ΅Ρ€ Π½Π° СкипаБлоТност Π½Π° CI/CD
Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π΅Π½ ΠΊΠ»ΠΎΠ½Π“ΡŠΠ²ΠΊΠ°Π²Π’ΡΡΠΊΠ°ΠΊΡŠΠ²ΠΠΈΡΠΊΠ°
GitflowΠŸΠ»Π°Π½ΠΈΡ€Π°Π½ΠΈ изданияБрСдСн–ГолямБрСдна
Π‘Π°Π·ΠΈΡ€Π°Π½ Π½Π° основния ΠΊΠ»ΠΎΠ½ΠΠ΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚ΠΎ Π²Π½Π΅Π΄Ρ€ΡΠ²Π°Π½Π΅Π’ΡΡΠΊΠ°ΠΊΡŠΠ²Π’ΠΈΡΠΎΠΊΠ°

Π₯остинг Π½Π° Git Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°: БамостоятСлно хостванС срСщу управлявани ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΈ

Π—Π° Π΅ΠΊΠΈΠΏΠΈ, изискващи сувСрСнитСт Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅, ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅ ΠΈΠ»ΠΈ частна инфраструктура, самостоятСлното хостванС Π½Π° Git ΡΡŠΡ€Π²ΡŠΡ€ Π΅ ТизнСспособСн ΠΈ чСсто Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ ΠΈΠ·Π±ΠΎΡ€. ΠžΠΏΡ†ΠΈΠΈΡ‚Π΅ Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚ Gitea (Π»Π΅ΠΊΠ°, Π±Π°Π·ΠΈΡ€Π°Π½Π° Π½Π° Go), GitLab CE (пълна DevOps ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°) ΠΈ Forgejo (Ρ€Π°Π·ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ Π½Π° Gitea с ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΡ‚ общността).

МинималСн самостоятСлно хостван СкзСмпляр Π½Π° Gitea Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΊΠΎΠΌΡ„ΠΎΡ€Ρ‚Π½ΠΎ Π½Π° ΠΏΠ»Π°Π½ Π·Π° VPS Π₯остинг с 2 vCPU ΠΈ 2 GB RAM. Π—Π° ΠΏΠΎ-Π³ΠΎΠ»Π΅ΠΌΠΈ Π΅ΠΊΠΈΠΏΠΈ ΠΈΠ»ΠΈ GitLab CE с CI ΠΈΠ·ΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»ΠΈ, 4–8 GB RAM Π΅ практичСският ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ.

ΠŸΡ€ΠΈ самостоятСлно хостванС, Π·Π°Ρ‰ΠΈΡ‚Π΅Ρ‚Π΅ своя Git ΡΡŠΡ€Π²ΡŠΡ€ с:

  • SSH удостовСряванС с ΠΊΠ»ΡŽΡ‡ (Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°ΠΉΡ‚Π΅ напълно удостовСряванСто с ΠΏΠ°Ρ€ΠΎΠ»Π°)
  • HTTPS с Π²Π°Π»ΠΈΠ΄Π΅Π½ сСртификат β€” SSL сСртификатитС са ΠΎΡ‚ ΡΡŠΡ‰Π΅ΡΡ‚Π²Π΅Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π·Π° Π·Π°Ρ‰ΠΈΡ‚Π° Π½Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ ΠΏΡ€ΠΈ прСнос
  • ΠŸΡ€Π°Π²ΠΈΠ»Π° Π½Π° Π·Π°Ρ‰ΠΈΡ‚Π½Π°Ρ‚Π° стСна, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π°Π²Π°Ρ‰ΠΈ ΠΈΠ·Π»Π°Π³Π°Π½Π΅Ρ‚ΠΎ Π½Π° Git ΠΏΠΎΡ€Ρ‚ (22 ΠΈΠ»ΠΈ пСрсонализиран SSH ΠΏΠΎΡ€Ρ‚, 443 Π·Π° HTTPS)
  • Π Π΅Π΄ΠΎΠ²Π½ΠΈ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΈ копия Π½Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈΡ‚Π΅ Π½Π° Π³ΠΎΠ»ΠΎΡ‚ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ .git
  • Π’Π°ΠΉΠ½ΠΈ Π·Π° webhook Π·Π° CI/CD ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ

Π—Π° Π΅ΠΊΠΈΠΏΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‰ΠΈ Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ Π½Π° Git ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ΠΈ Π·Π° внСдряванС, ΠΊΠΎΠΈΡ‚ΠΎ ΡΡŠΡ‰ΠΎ управляват ΡƒΠ΅Π± инфраструктура, ΡΡŠΡ‡Π΅Ρ‚Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° самостоятСлно хостван Git ΡΡŠΡ€Π²ΡŠΡ€ с VPS с cPanel Π²ΠΈ Π΄Π°Π²Π° ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½ΠΈ ΠΊΡƒΠΊΠΈ Π·Π° внСдряванС Π·Π°Π΅Π΄Π½ΠΎ с ΠΏΠΎΠ·Π½Π°Ρ‚ΠΈ инструмСнти Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° хостинга.

Git ΠΊΡƒΠΊΠΈ: АвтоматизиранС Π½Π° ΠΏΠΎΡ€Ρ‚ΠΈΡ‚Π΅ Π·Π° качСство

Git ΠΊΡƒΠΊΠΈΡ‚Π΅ са скриптовС, ΠΊΠΎΠΈΡ‚ΠΎ сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΎΡ‚ ТизнСния Ρ†ΠΈΠΊΡŠΠ» Π½Π° Git. Π’Π΅ сС Π½Π°ΠΌΠΈΡ€Π°Ρ‚ Π² .git/hooks/ ΠΈ Π½Π΅ сС ΠΊΠΎΠΌΠΈΡ‚Π²Π°Ρ‚ Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ (ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ инструмСнт ΠΊΠ°Ρ‚ΠΎ pre-commit ΠΈΠ»ΠΈ husky Π·Π° сподСлянСто ΠΈΠΌ).

ΠšΠ»ΡŽΡ‡ΠΎΠ²ΠΈ ΠΊΡƒΠΊΠΈ Π·Π° производствСни Ρ€Π°Π±ΠΎΡ‚Π½ΠΈ процСси:

ΠšΡƒΠΊΠ°Π—Π°Π΄Π΅ΠΉΡΡ‚Π²Π°Π½Π΅Π§Π΅ΡΡ‚Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°
`pre-commit`ΠŸΡ€Π΅Π΄ΠΈ ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠΌΠΈΡ‚Π˜Π·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° Π»ΠΈΠ½Ρ‚Π΅Ρ€ΠΈ, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅Ρ€ΠΈ, тСстовС
`commit-msg`Π‘Π»Π΅Π΄ написванС Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π·Π° комитНалаганС Π½Π° Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π½Π° ΠΊΠΎΠ½Π²Π΅Π½Ρ†ΠΈΠΎΠ½Π°Π»Π΅Π½ ΠΊΠΎΠΌΠΈΡ‚
`pre-push`ΠŸΡ€Π΅Π΄ΠΈ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ към ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ΠΎΡ‚ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Π˜Π·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° пълния Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ тСстовС
`post-receive`Π‘Π»Π΅Π΄ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ ΠΎΡ‚ ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ΠΎΡ‚ΠΎ хранилищСЗадСйстванС Π½Π° внСдряванС, ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π½Π° извСстия
`pre-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: ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Ρ‚Π΅ към ΡΡŠΡ€Π²ΡŠΡ€Π°, ΠΊΡƒΠΊΠ°Ρ‚Π° ΠΈΠ·Π²Π»ΠΈΡ‡Π° новия 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 ΠΈΠ·Π²Π»ΠΈΡ‡Π° само подмноТСство ΠΎΡ‚ Ρ€Π°Π±ΠΎΡ‚Π½ΠΎΡ‚ΠΎ Π΄ΡŠΡ€Π²ΠΎ. ПолСзно Π² ΠΌΠΎΠ½ΠΎΡ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡŠΡ‚ Ρ€Π°Π±ΠΎΡ‚ΠΈ само Π² дирСкторията Π½Π° Π΅Π΄Π½Π° услуга.
  • Π€Π°ΠΉΠ» с Π³Ρ€Π°Ρ„ Π½Π° ΠΊΠΎΠΌΠΈΡ‚ΠΈΡ‚Π΅: git commit-graph write --reachable ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ изчислява Π³Ρ€Π°Ρ„Π° Π½Π° ΠΊΠΎΠΌΠΈΡ‚ΠΈΡ‚Π΅, ускорявайки ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠ°Ρ‚ΠΎ git log --graph ΠΈ заявки Π·Π° достиТимост ΠΏΡ€ΠΈ голяма история.
  • git maintenance start: ΠŸΠ»Π°Π½ΠΈΡ€Π° Ρ„ΠΎΠ½ΠΎΠ²ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ Π·Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° (ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° свободни ΠΎΠ±Π΅ΠΊΡ‚ΠΈ, Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° Π³Ρ€Π°Ρ„Π° Π½Π° ΠΊΠΎΠΌΠΈΡ‚ΠΈΡ‚Π΅, ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΈΠ·Π²Π»ΠΈΡ‡Π°Π½Π΅) Π·Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½Π΅ Π½Π° Π±ΡŠΡ€Π·ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ с Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π½Π° Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ.

ВСхничСски ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Π½ списък с ΠΊΠ»ΡŽΡ‡ΠΎΠ²ΠΈ ΠΈΠ·Π²ΠΎΠ΄ΠΈ

ΠŸΡ€Π΅Π΄ΠΈ Π΄Π° считатС настройката Π½Π° Git Π·Π° Π³ΠΎΡ‚ΠΎΠ²Π° Π·Π° производство, ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Ρ‚Π΅ всяко ΠΎΡ‚ слСднитС:

  • ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π° самоличност: user.name ΠΈ user.email Π·Π°Π΄Π°Π΄Π΅Π½ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ ΠΏΡ€ΠΈ подходящия ΠΎΠ±Ρ…Π²Π°Ρ‚ Π½Π° конфигурацията
  • Използвани SSH ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅: УдостовСряванСто с ΠΏΠ°Ρ€ΠΎΠ»Π° към ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ΠΈ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π·Π°ΠΌΠ΅Π½Π΅Π½ΠΎ с Π΄Π²ΠΎΠΉΠΊΠΈ SSH ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅ ΠΈΠ»ΠΈ HTTPS, Π±Π°Π·ΠΈΡ€Π°Π½ Π½Π° Ρ‚ΠΎΠΊΠ΅Π½ΠΈ
  • .gitignore ΠΊΠΎΠΌΠΈΡ‚Π½Π°Ρ‚: Π’Π°ΠΉΠ½ΠΈ, Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΈ ΠΎΡ‚ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π½Π° ОБ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈ ΠΏΡ€Π΅Π΄ΠΈ ΠΏΡŠΡ€Π²ΠΈΡ ΠΊΠΎΠΌΠΈΡ‚
  • ΠžΡΠ½ΠΎΠ²Π½ΠΈΡΡ‚ ΠΊΠ»ΠΎΠ½ Π΅ Π½Π°Ρ€Π΅Ρ‡Π΅Π½ main: init.defaultBranch Π·Π°Π΄Π°Π΄Π΅Π½ Π³Π»ΠΎΠ±Π°Π»Π½ΠΎ, Π·Π° Π΄Π° сС ΠΈΠ·Π±Π΅Π³Π½Π΅ наслСдствСното ΠΈΠΌΠ΅Π½ΡƒΠ²Π°Π½Π΅ master
  • Π‘ΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡΡ‚Π° Π·Π° ΠΊΠΎΠΌΠΈΡ‚ΠΈ слСдват конвСнция: ΠšΠΎΠ½Π²Π΅Π½Ρ†ΠΈΠΎΠ½Π°Π»Π½ΠΈ ΠΊΠΎΠΌΠΈΡ‚ΠΈ (feat:, fix:, chore:) ΠΈΠ»ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Π΅Π½ ΠΎΡ‚ Π΅ΠΊΠΈΠΏΠ°, Π½Π°Π»ΠΎΠΆΠ΅Π½ Ρ‡Ρ€Π΅Π· ΠΊΡƒΠΊΠ° commit-msg
  • git revert Π·Π° ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Π° история: git reset --hard ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ само ΠΏΡ€ΠΈ Π»ΠΎΠΊΠ°Π»Π½ΠΈ, Π½Π΅ΠΈΠ·ΠΏΡ€Π°Ρ‚Π΅Π½ΠΈ ΠΊΠΎΠΌΠΈΡ‚ΠΈ
  • --force-with-lease вмСсто --force: ΠŸΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΡΠ²Π° случайно прСзаписванС Π½Π° изпращанията Π½Π° ΠΊΠΎΠ»Π΅Π³ΠΈ
  • Анотирани Ρ‚Π°Π³ΠΎΠ²Π΅ Π·Π° издания: git tag -a със ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅, Π° Π½Π΅ Π»Π΅ΠΊΠΈ Ρ‚Π°Π³ΠΎΠ²Π΅
  • ΠšΡƒΠΊΠΈΡ‚Π΅ сподСлСни Ρ‡Ρ€Π΅Π· pre-commit ΠΈΠ»ΠΈ husky: ΠŸΠΎΡ€Ρ‚ΠΈΡ‚Π΅ Π·Π° качСство Π½Π°Π»ΠΎΠΆΠ΅Π½ΠΈ послСдоватСлно Π² цСлия Π΅ΠΊΠΈΠΏ
  • Git LFS ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½, Π°ΠΊΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° Π΄Π²ΠΎΠΈΡ‡Π½ΠΈ Π°ΠΊΡ‚ΠΈΠ²ΠΈ Π½Π°Π΄ 1 MB
  • Π“ΠΎΠ»ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π°: БамостоятСлно хостванитС ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ΠΈ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ с git init --bare
  • Π Π΅Π΄ΠΎΠ²Π΅Π½ git fetch --prune: Π Π΅Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈΡ‚Π΅ Π·Π° ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ΠΎ прослСдяванС ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½ΠΈ синхронизирани с дСйствитСлното ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ΠΎ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅

ЧСсто Π·Π°Π΄Π°Π²Π°Π½ΠΈ Π²ΡŠΠΏΡ€ΠΎΡΠΈ

Каква Π΅ Ρ€Π°Π·Π»ΠΈΠΊΠ°Ρ‚Π° ΠΌΠ΅ΠΆΠ΄Ρƒ git fetch ΠΈ git pull?

git fetch изтСгля ΠΊΠΎΠΌΠΈΡ‚ΠΈ, ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅ ΠΈ Ρ‚Π°Π³ΠΎΠ²Π΅ ΠΎΡ‚ ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ΠΎΡ‚ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π² Π»ΠΎΠΊΠ°Π»Π½ΠΈΡ‚Π΅ Ρ€Π΅Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ Π·Π° ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ΠΎ прослСдяванС (Π½Π°ΠΏΡ€. origin/main), Π±Π΅Π· Π΄Π° засяга Ρ€Π°Π±ΠΎΡ‚Π½Π°Ρ‚Π° дирСктория ΠΈΠ»ΠΈ тСкущия ΠΊΠ»ΠΎΠ½. git pull Π΅ git fetch, послСдвано Π½Π΅Π·Π°Π±Π°Π²Π½ΠΎ ΠΎΡ‚ git merge (ΠΈΠ»ΠΈ git rebase, Π°ΠΊΠΎ Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½ΠΎ). Π˜Π·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ git fetch, ΠΊΠΎΠ³Π°Ρ‚ΠΎ искатС Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π½Π°Π³ΠΎΡ€Π΅ ΠΏΠΎ Π²Π΅Ρ€ΠΈΠ³Π°Ρ‚Π° ΠΏΡ€Π΅Π΄ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ ΠΈΠΌ.

Кога трябва Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ git rebase вмСсто git merge?

Π˜Π·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ rebase Π·Π° Π»ΠΈΠ½Π΅Π°Ρ€ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° локалния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π΅Π½ ΠΊΠ»ΠΎΠ½ ΠΏΡ€Π΅Π΄ΠΈ отварянС Π½Π° заявка Π·Π° сливанС, ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°ΠΉΠΊΠΈ историята Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Ρ‡Π΅Ρ‚ΠΈΠΌΠ°. Никога Π½Π΅ ΠΏΡ€Π΅Π±Π°Π·ΠΈΡ€Π°ΠΉΡ‚Π΅ ΠΊΠ»ΠΎΠ½, Π²ΡŠΡ€Ρ…Ρƒ ΠΊΠΎΠΉΡ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ Π²Π΅Ρ‡Π΅ са ΠΊΠ»ΠΎΠ½ΠΈΡ€Π°Π»ΠΈ ΠΈΠ»ΠΈ Π±Π°Π·ΠΈΡ€Π°Π»ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° β€” прСзаписванСто Π½Π° ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½ΠΈ Ρ…Π΅ΡˆΠΎΠ²Π΅ Π½Π° ΠΊΠΎΠΌΠΈΡ‚ΠΈ ΠΏΡ€ΠΈΠ½ΡƒΠΆΠ΄Π°Π²Π° всички останали Ρ€ΡŠΡ‡Π½ΠΎ Π΄Π° ΡΡŠΠ³Π»Π°ΡΡƒΠ²Π°Ρ‚ Ρ€Π°Π·ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΡ‚Π΅ истории.

Как Π΄Π° ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π° ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»Π½ΠΎ чувствитСлСн Ρ„Π°ΠΉΠ», случайно ΠΊΠΎΠΌΠΈΡ‚Π½Π°Ρ‚?

Π˜Π·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ git filter-repo (ΡΡŠΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ‚Π° замяна Π½Π° git filter-branch): git filter-repo --path secrets.env --invert-paths. Π’ΠΎΠ²Π° прСзаписва цялата история Π½Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ, ΠΏΡ€Π΅ΠΌΠ°Ρ…Π²Π°ΠΉΠΊΠΈ Ρ„Π°ΠΉΠ»Π° ΠΎΡ‚ всСки ΠΊΠΎΠΌΠΈΡ‚. Π‘Π»Π΅Π΄ прСзаписванСто, ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΈΠ·ΠΏΡ€Π°Ρ‚Π΅Ρ‚Π΅ всички ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅ ΠΈ Ρ‚Π°Π³ΠΎΠ²Π΅, слСд ΠΊΠΎΠ΅Ρ‚ΠΎ Π½Π΅Π·Π°Π±Π°Π²Π½ΠΎ смСнСтС Ρ€Π°Π·ΠΊΡ€ΠΈΡ‚ΠΈΡ‚Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½ΠΈ Π΄Π°Π½Π½ΠΈ β€” ΠΏΡ€ΠΈΠ΅ΠΌΠ°ΠΉΡ‚Π΅, Ρ‡Π΅ са ΠΊΠΎΠΌΠΏΡ€ΠΎΠΌΠ΅Ρ‚ΠΈΡ€Π°Π½ΠΈ, нСзависимо ΠΊΠΎΠ»ΠΊΠΎ Π±ΡŠΡ€Π·ΠΎ дСйстватС.

Какво Π΅ ΠΎΡ‚Π΄Π΅Π»Π΅Π½ΠΎ HEAD ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ ΠΈ ΠΊΠ°ΠΊ Π΄Π° сС Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²Ρ ΠΎΡ‚ Π½Π΅Π³ΠΎ?

ΠžΡ‚Π΄Π΅Π»Π΅Π½ΠΎΡ‚ΠΎ HEAD ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ Π²Π°ΡˆΠΈΡΡ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π» HEAD ΠΏΡ€Π΅ΠΏΡ€Π°Ρ‰Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ към ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π΅Π½ Ρ…Π΅Ρˆ Π½Π° ΠΊΠΎΠΌΠΈΡ‚, Π° Π½Π΅ към ΠΈΠΌΠ΅ Π½Π° ΠΊΠ»ΠΎΠ½. Всички ΠΊΠΎΠΌΠΈΡ‚ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΡ‚Π΅, няма Π΄Π° ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ към Π½ΠΈΠΊΠΎΠΉ ΠΊΠ»ΠΎΠ½ ΠΈ Ρ‰Π΅ станат нСдостиТими слСд ΠΏΡ€Π΅Π²ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅. Π—Π° Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅: git switch -c new-branch-name Π·Π° ΠΏΡ€ΠΈΠΊΠ°Ρ‡Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠΈΡ‚ΠΈΡ‚Π΅ към Π½ΠΎΠ² ΠΊΠ»ΠΎΠ½, ΠΈΠ»ΠΈ git switch main Π·Π° ΠΎΡ‚Ρ…Π²ΡŠΡ€Π»ΡΠ½Π΅Ρ‚ΠΎ ΠΈΠΌ.

Как Git ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° Π΄Π²ΠΎΠΈΡ‡Π½ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΏΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½ Π½Π°Ρ‡ΠΈΠ½ ΠΎΡ‚ тСкстовитС Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅?

Git ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° Π΄Π²ΠΎΠΈΡ‡Π½ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΊΠ°Ρ‚ΠΎ Π½Π΅ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΈ blob-ΠΎΠ²Π΅ β€” Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° изчислява смислСни Ρ€Π°Π·Π»ΠΈΠΊΠΈ Π½Π° Π½ΠΈΠ²ΠΎ Ρ€Π΅Π΄ΠΎΠ²Π΅ ΠΈΠ»ΠΈ Π΄Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΈ сливания Π²ΡŠΡ€Ρ…Ρƒ тях. ΠšΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΈΡ‚Π΅ Π² Π΄Π²ΠΎΠΈΡ‡Π½ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ трябва Π΄Π° сС Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²Π°Ρ‚ Ρ‡Ρ€Π΅Π· ΠΈΠ·Π±ΠΎΡ€ Π½Π° Π΅Π΄Π½Π° вСрсия изцяло. Π—Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° със Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΈ Π΄Π²ΠΎΠΈΡ‡Π½ΠΈ Π°ΠΊΡ‚ΠΈΠ²ΠΈ, ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°ΠΉΡ‚Π΅ Git LFS Π·Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π° Π΄Π²ΠΎΠΈΡ‡Π½ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ извън Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ, ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°ΠΉΠΊΠΈ самото Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΎ ΠΈ Π±ΡŠΡ€Π·ΠΎ.