Π Π°Π·Π½ΠΎΠ΅

ΠšΠΎΠΌΠΌΠΈΡ‚ git: Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Git. Π§Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ ΠΈ ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ?

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

Git commit | Atlassian Git Tutorial

Команда git commit Π΄Π΅Π»Π°Π΅Ρ‚ для ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° снимок Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ состояния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π² Ρ€Π°Π·Π΄Π΅Π» проиндСксированных Ρ„Π°ΠΉΠ»ΠΎΠ². Π’Π°ΠΊΠΈΠ΅ зафиксированныС снимки состояния ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ «бСзопасныС» вСрсии ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° β€” Git Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡ… ΠΌΠ΅Π½ΡΡ‚ΡŒ, ΠΏΠΎΠΊΠ° Π²Ρ‹ явным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π½Π΅ попроситС ΠΎΠ± этом. ΠŸΠ΅Ρ€Π΅Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git commit Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git add, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ (Β«ΠΏΡ€ΠΎΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΒ») Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ измСнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ сохранСны Π² ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅. Π­Ρ‚ΠΈ Π΄Π²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, git commit ΠΈ git add, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‡Π°Ρ‰Π΅ всСго.

ΠšΠΎΠΌΠΌΠΈΡ‚ Π² Git ΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚ Π² SVN

НСсмотря Π½Π° ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅, ΠΊΠΎΠΌΠ°Π½Π΄Π° git commit Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΎΠ±Ρ‰Π΅Π³ΠΎ с ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ svn commit. Π­Ρ‚ΠΎΡ‚ ΠΎΠ±Ρ‰Π΅ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡƒΡ‚Π°Ρ‚ΡŒ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ² Π² Git, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ… ΠΎΠΏΡ‹Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с SVN, поэтому Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠ½ΡƒΡ‚ΡŒ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ. Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ git commit ΠΈ svn commit β€” это Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ модСлью Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ прилоТСния (SVN) ΠΈ модСлью распрСдСлСнного прилоТСния (Git). Π’ SVN ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° измСнСния ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΈΠ· локального ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° SVN Π² ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΎΠ±Ρ‰ΠΈΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ SVN. Π’ Git Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ распрСдСлСны, ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ снимков состояния Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π² Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, ΠΈ для этого ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ рСпозиториями Git. ПозТС ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Git ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ.

ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ дСйствий

НС вдаваясь Π² подробности, Git ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ управлСния Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ шкалой. ΠšΠΎΠΌΠΌΠΈΡ‚Ρ‹ β€” основныС конструктивныС элСмСнты Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡˆΠΊΠ°Π»Ρ‹ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Git. Π˜Ρ… ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ снимки состояния ΠΈΠ»ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ Π½Π° Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ шкалС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Git. ΠšΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git commit, которая Π΄Π΅Π»Π°Π΅Ρ‚ снимок состояния ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. ΠšΠΎΠΌΠΌΠΈΡ‚Ρ‹ снимков состояния Git всСгда Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π² Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ. Π’ этом ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ SVN, Π³Π΄Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ ΠΊΠΎΠΏΠΈΠΈ выполняСтся Π² Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ. Git ΠΆΠ΅, Π½Π°ΠΏΡ€ΠΎΡ‚ΠΈΠ², Π½Π΅ ΠΏΡ€ΠΈΠ½ΡƒΠΆΠ΄Π°Π΅Ρ‚ вас Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅ΠΌ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π²Ρ‹ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΊ этому Π³ΠΎΡ‚ΠΎΠ²Ρ‹. Как Ρ€Π°Π·Π΄Π΅Π» проиндСксированных Ρ„Π°ΠΉΠ»ΠΎΠ² являСтся Π±ΡƒΡ„Π΅Ρ€ΠΎΠΌ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠΌ ΠΈ историСй ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Ρ‚Π°ΠΊ ΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° являСтся Π±ΡƒΡ„Π΅Ρ€ΠΎΠΌ ΠΌΠ΅ΠΆΠ΄Ρƒ Π΅Π³ΠΎ Π²ΠΊΠ»Π°Π΄ΠΎΠΌ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅ΠΌ.

Π­Ρ‚ΠΎ мСняСт Π±Π°Π·ΠΎΠ²ΡƒΡŽ модСль Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Git. ВмСсто Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Π½ΠΎΡΠΈΡ‚ΡŒ измСнСния ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ нСпосрСдствСнно Π² Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Git ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°ΠΊΠ°ΠΏΠ»ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π² своСм локальном Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΈΠΌΠ΅Π΅Ρ‚ мноТСство прСимущСств ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с совмСстной Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ Π² стилС SVN: ΠΎΠ½ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° ΠΌΠ΅Π»ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, объСдинСниС связанных ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² ΠΈ очистку локальной истории ΠΏΠ΅Ρ€Π΅Π΄ Π΅Π΅ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠ΅ΠΉ Π² Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ. Он Ρ‚Π°ΠΊΠΆΠ΅ позволяСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ срСдС, откладывая ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π°Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΊ слиянию с Π½Π°Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°ΠΌΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. Но хотя изоляция ΠΈ отлоТСнная интСграция ΡƒΠ΄ΠΎΠ±Π½Ρ‹ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°, ΠΏΡ€ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ часто ΠΈ малСнькими Π±Π»ΠΎΠΊΠ°ΠΌΠΈ. Для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΉ ΠΏΠΎ совмСстной Ρ€Π°Π±ΠΎΡ‚Π΅ Π² Git Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅, ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΡ€ΡƒΡŽΡ‚ свой Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ процСсс Π² Git.

Π‘Π½ΠΈΠΌΠΊΠΈ состояния, Π° Π½Π΅ различия

Помимо Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ SVN ΠΈ Git с практичСской Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния, ΠΈΡ… базовая рСализация Ρ‚Π°ΠΊΠΆΠ΅ основываСтся Π½Π° ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Ρ€Π°Π·Π½Ρ‹Ρ… концСпциях проСктирования. SVN отслСТиваСт различия Π² Ρ„Π°ΠΉΠ»Π΅, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ модСль управлСния вСрсиями Git базируСтся Π½Π° снимках состояния. НапримСр, Π² ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅ SVN содСрТатся различия исходного Ρ„Π°ΠΉΠ»Π° ΠΈ Ρ„Π°ΠΉΠ»Π°, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅. А Git записываСт Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅ всС содСрТимоС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°.

Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² Git Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ быстрСС, Ρ‡Π΅ΠΌ Π² SVN, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Ρ„Π°ΠΉΠ»Π° Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Β«ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒΒ» ΠΈΠ· Π΅Π³ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ β€” Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Git находится ΡƒΠΆΠ΅ готовая рСдакция ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°.

МодСль снимков состояния Git влияСт практичСски Π½Π° всС аспСкты ΠΌΠΎΠ΄Π΅Π»ΠΈ управлСния вСрсиями, ΠΎΡ‚ инструмСнтов вСтвлСния ΠΈ слияния Π΄ΠΎ Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… процСссов ΠΏΡ€ΠΈ совмСстной Ρ€Π°Π±ΠΎΡ‚Π΅.

РаспространСнныС ΠΎΠΏΡ†ΠΈΠΈ

 git commit

ΠšΠΎΠΌΠΌΠΈΡ‚ проиндСксированного состояния ΠΊΠΎΠ΄Π°. Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΎΡ‚ΠΊΡ€ΠΎΠ΅Ρ‚ тСкстовый Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ с ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ввСсти ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ ΠΊ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρƒ. ПослС Π²Π²ΠΎΠ΄Π° коммСнтария сохранитС Ρ„Π°ΠΉΠ» ΠΈ Π·Π°ΠΊΡ€ΠΎΠΉΡ‚Π΅ тСкстовый Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚.

 git commit -a

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° состояния со всСми измСнСниями Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅. Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ отслСТиваСмых Ρ„Π°ΠΉΠ»ΠΎΠ² (Ρ‚Π΅Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π² ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git add).

 git commit -m "ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ ΠΊ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρƒ"

Быстрая ΠΊΠΎΠΌΠ°Π½Π΄Π°, которая создаСт ΠΊΠΎΠΌΠΌΠΈΡ‚ с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅ΠΌ. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Π° git commit ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ локально настроСнный тСкстовый Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ с ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ввСсти ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ ΠΊ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρƒ. ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° -m тСкстовый Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ Π½Π΅ открываСтся, Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ подставлСнный ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ.

 git commit -am "ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ ΠΊ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρƒ"

ΠœΠΎΡ‰Π½Π°Ρ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠ°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°, состоящая ΠΈΠ· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² -a ΠΈ -m. Π­Ρ‚Π° комбинация создаСт ΠΊΠΎΠΌΠΌΠΈΡ‚ всСх проиндСксированных ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈ добавляСт ΠΊ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρƒ подставлСнный ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ.

 git commit --amend

Π­Ρ‚ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ добавляСт ΠΊΠΎΠΌΠ°Π½Π΄Π΅ commit Π½ΠΎΠ²Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ этого ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ послСдний ΠΊΠΎΠΌΠΌΠΈΡ‚. ВмСсто создания Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° проиндСксированныС измСнСния Π±ΡƒΠ΄ΡƒΡ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, эта ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΎΡ‚ΠΊΡ€ΠΎΠ΅Ρ‚ настроСнный тСкстовый Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ систСмы с ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Ρ€Π°Π½Π΅Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ ΠΊ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρƒ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ commit

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ прСдполагаСтся, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ содСрТимоС Ρ„Π°ΠΉΠ»Π° hello.py Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠ΅ ΠΈ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚ Π² ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git add, Π° послС этого Π²Ρ‹ смоТСтС ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚ проиндСксированного снимка состояния.

 git add hello.py

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ Ρ„Π°ΠΉΠ» hello.py Π² Ρ€Π°Π·Π΄Π΅Π» проиндСксированных Ρ„Π°ΠΉΠ»ΠΎΠ² Git. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ git status.

 git status On branch master Changes to be committed: (use "git reset HEAD ..." to unstage) new file: hello.py 

ΠžΠΊΡ€Π°ΡˆΠ΅Π½Π½Ρ‹ΠΉ Π·Π΅Π»Π΅Π½Ρ‹ΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ Π²Ρ‹Π²ΠΎΠ΄ Β«new file: hello.pyΒ» сообщаСт ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ» hello.py Π±ΡƒΠ΄Π΅Ρ‚ сохранСн ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°. ΠšΠΎΠΌΠΌΠΈΡ‚ выполняСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π½ΠΈΠΆΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹.

git commit

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΎΡ‚ΠΊΡ€ΠΎΠ΅Ρ‚ тСкстовый Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ (настраиваСмый Ρ‡Π΅Ρ€Π΅Π· git config) для Π²Π²ΠΎΠ΄Π° коммСнтария ΠΊ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρƒ ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ список Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ зафиксированы Π² этом ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅:

 # Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ ΠΊ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρƒ, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ внСсСнныС измСнСния. Π‘Ρ‚Ρ€ΠΎΡ‡ΠΊΠΈ, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ΡΡ # с символа #, Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ, Π° пустой ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ΠΎΡ‚ΠΌΠ΅Π½Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°. # Π’ Π³Π»Π°Π²Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅ # ΠšΠΎΠΌΠΌΠΈΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ: # (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ "git reset HEAD ..." для ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°) # #modified: hello.py

ΠžΡΠΎΠ±Ρ‹Ρ… Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ для ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² ΠΊ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρƒ Π² Git Π½Π΅Ρ‚, Π½ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ пСрвая строка содСрТит описания ΠΊΠΎΠΌΠΌΠΈΡ‚Π° Π΄Π»ΠΈΠ½ΠΎΠΉ Π΄ΠΎ 50 символов, Π·Π°Ρ‚Π΅ΠΌ слСдуСт пустая строка ΠΈ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ пояснСниС Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

 ИзмСнСниС сообщСния, Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»ΠΎΠΌ hello.py
- Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ sayHello() Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ - Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ sayGoodbye() Π±ΠΎΠ»Π΅Π΅ понятного сообщСния

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ пСрвая строка коммСнтария ΠΊ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρƒ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Π° Ρ‚Π΅ΠΌΠ΅ элСктронного письма. ΠžΡΡ‚Π°Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ коммСнтария считаСтся Ρ‚Π΅Π»ΠΎΠΌ сообщСния ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ описания Π½Π°Π±ΠΎΡ€Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅. МногиС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² коммСнтариях настоящСС врСмя. Π’Π°ΠΊ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ становится большС ΠΏΠΎΡ…ΠΎΠΆ Π½Π° список дСйствий Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ, благодаря Ρ‡Π΅ΠΌΡƒ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ пСрСзаписи истории становятся Π±ΠΎΠ»Π΅Π΅ ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ понятными.

ОбновлСниС ΠΊΠΎΠΌΠΌΠΈΡ‚Π° (ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ amend)

ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Ρƒ с Ρ„Π°ΠΉΠ»ΠΎΠΌ hello.py ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π²Ρ‹ΡˆΠ΅. Π”Π°Π²Π°ΠΉΡ‚Π΅ внСсСм Π² Ρ„Π°ΠΉΠ» hello.py Π½ΠΎΠ²Ρ‹Π΅ измСнСния ΠΈ запустим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

 git add hello.py git commit --amend

Π‘Π½ΠΎΠ²Π° откроСтся настроСнный тСкстовый Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€. Но Π½Π° этот Ρ€Π°Π· ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ ΠΊ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ ΡƒΠΆΠ΅ Π²Π²ΠΎΠ΄ΠΈΠ»ΠΈ Ρ€Π°Π½Π΅Π΅. Π­Ρ‚ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ создаСм Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚, Π° Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠ΅ΠΌ послСдний.

РСзюмС

Команда git commit являСтся ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· основных ΠΈ пСрвостСпСнных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Git. Для Π²Ρ‹Π±ΠΎΡ€Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚, сначала ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° git add. Π—Π°Ρ‚Π΅ΠΌ запускаСтся ΠΊΠΎΠΌΠ°Π½Π΄Π° git commit, которая создаСт снимок проиндСксированных ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π½Π° Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ шкалС истории ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Git. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΠ± использовании ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git add см. Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ страницС. Команда git status ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для изучСния состояния Ρ€Π°Π·Π΄Π΅Π»Π° проиндСксированных Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°.

МодСли ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π² SVN ΠΈ Π² Git сущСствСнно ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ, Π½ΠΎ ΠΈΠ·-Π·Π° ΠΎΠ±Ρ‰Π΅ΠΉ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ часто Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Π°. Если Π²Ρ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π² Git, имСя ΠΎΠΏΡ‹Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с SVN, Π²Π°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π² Git β€” простая опСрация, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ слСдуСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ часто. Π’ SVN ΠΊΠΎΠΌΠΌΠΈΡ‚ β€” слоТная опСрация, связанная с Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ запроса, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π² Git ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ локально ΠΈ ΠΏΠΎ Π±ΠΎΠ»Π΅Π΅ эффСктивному Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ.

ΠŸΠΎΡΡ‚ΠΈΠ³Π°Π΅ΠΌ Git / Π₯Π°Π±Ρ€

ΠžΡ‚ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°: Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π½Π΅Ρ‚ описания ΠΊΠΎΠΌΠ°Π½Π΄ git, ΠΎΠ½Π° ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΡƒΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с Π½ΠΈΠΌ. Π—Π΄Π΅ΡΡŒ описываСтся Π²ΠΏΠΎΠ»Π½Π΅ Π·Π΄Ρ€Π°Π²Ρ‹ΠΉ, Π½Π° ΠΌΠΎΠΉ взгляд, ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΡŽ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠΉ истории Π² чистотС ΠΈ порядкС.

Если Π²Ρ‹ Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ±ΡƒΠ΄ΠΈΠ»ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ git ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊΠΈΠΌ, Ρ‚ΠΎ вас ΠΆΠ΄ΡƒΡ‚ страдания. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ мноТСство Ρ„Π»Π°Π³ΠΎΠ² (—flag), Π²Ρ‹ смоТСтС Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ git Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ ΠΏΠΎ Π²Π°ΡˆΠ΅ΠΌΡƒ мнСнию ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ git Ρ‚ΠΎΠ³ΠΎ Ρ…ΠΎΡ‡Π΅Ρ‚. Π­Ρ‚ΠΎ ΠΊΠ°ΠΊ Π·Π°Π±ΠΈΠ²Π°Ρ‚ΡŒ Π³Π²ΠΎΠ·Π΄ΠΈ ΠΎΡ‚Π²Π΅Ρ€Ρ‚ΠΊΠΎΠΉ. Π Π°Π±ΠΎΡ‚Π° дСлаСтся, Π½ΠΎ Ρ…ΡƒΠΆΠ΅, ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Π΄Π° ΠΈ ΠΎΡ‚Π²Π΅Ρ€Ρ‚ΠΊΠ° портится.

Рассмотрим, ΠΊΠ°ΠΊ разваливаСтся ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ с git.

ΠžΡ‚ΠΏΠΎΡ‡ΠΊΠΎΠ²Ρ‹Π²Π°Π΅ΠΌ Π²Π΅Ρ‚ΠΊΡƒ ΠΎΡ‚ master, Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ, сливаСм ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΈ.

Π‘ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΈ оТидаСтся, ΠΏΠΎΡ‚ΠΎΠΌΡƒ ΠΊΠ°ΠΊ master мСняСтся послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ сдСлали ΠΎΡ‚Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠ΅ (Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ Π² master коммитят ваши ΠΊΠΎΠ»Π»Π΅Π³ΠΈ β€” ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°.). ΠžΠ΄Π½Π°ΠΆΠ΄Ρ‹ Π²Ρ‹ сливаСтС Π²Π΅Ρ‚ΠΊΡƒ feature Π² master, Π½ΠΎ master Π½Π΅ мСнялась. ВмСсто ΠΊΠΎΠΌΠΌΠΈΡ‚Π° слияния (merge commit) git просто ΠΏΠ΅Ρ€Π΅Π΄Π²ΠΈΠ³Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ master Π½Π° послСдний ΠΊΠΎΠΌΠΌΠΈΡ‚, происходит fast forward.

Для пояснСния ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° fast forward я позаимствовал ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ извСстной ΡΡ‚Π°Ρ‚ΡŒΠΈ. ΠŸΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°.

К Π½Π΅ΡΡ‡Π°ΡΡ‚ΡŒΡŽ ваша Π²Π΅Ρ‚ΠΊΠ° feature содСрТала ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ β€” частыС ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, Ρ‡Ρ‚ΠΎ бСкапят Ρ€Π°Π±ΠΎΡ‚Ρƒ, Π½ΠΎ Π·Π°Ρ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ ΠΊΠΎΠ΄ Π² Π½Π΅Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ состоянии. Π’Π΅ΠΏΠ΅Ρ€ΡŒ эти ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π½Π΅ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΌΡ‹ ΠΎΡ‚ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π² master. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ с Π»Π΅Π³ΠΊΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‚ΠΊΠ°Ρ‚ΠΈΡ‚ΡŒΡΡ Π² этакоС бСдствиС.

Π˜Ρ‚Π°ΠΊ, Π²Ρ‹ добавляСтся Π½ΠΎΠ²ΠΎΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ: Β«Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ —no-ff ΠΏΡ€ΠΈ слиянии Π²Π΅Ρ‚ΠΎΠΊ featureΒ». Π­Ρ‚ΠΎ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΈ Π²Ρ‹ Π΄Π²ΠΈΠ³Π°Π΅Ρ‚Π΅ΡΡŒ дальшС.

Π—Π°Ρ‚Π΅ΠΌ Π² ΠΎΠ΄ΠΈΠ½ прСкрасный дСнь Π²Ρ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚Π΅ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹ΠΉ Π±Π°Π³ Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π΅ ΠΈ Π²Π°ΠΌ трСбуСтся ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ появился. Π’Ρ‹ запускаСтС bisect, Π½ΠΎ постоянно ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚Π΅ Π½Π° ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹. Π’Ρ‹ ΡΠ΄Π°Π΅Ρ‚Π΅ΡΡŒ ΠΈ ΠΈΡ‰Π΅Ρ‚Π΅ Ρ€ΡƒΠΊΠ°ΠΌΠΈ.

Π’Ρ‹ Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΡƒΠ΅Ρ‚Π΅ Π±Π°Π³ Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ Ρ„Π°ΠΉΠ»Π°. ЗапускаСтС blame, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, измСнСния Π·Π° послСдниС 48 часов. Π’Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ это Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½ΠΎ blame сообщаСт, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ» Π½Π΅ измСнялся нСсколько нСдСль. ВыясняСтся, Ρ‡Ρ‚ΠΎ blame Π²Ρ‹Π΄Π°Π΅Ρ‚ врСмя исходного ΠΊΠΎΠΌΠΌΠΈΡ‚Π° вмСсто Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ слияния Π²Π΅Ρ‚ΠΊΠΈ (Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ, вСдь merge commit пуст β€” ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°). Π’Π°Ρˆ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ» этот Ρ„Π°ΠΉΠ» нСсколько нСдСль Π½Π°Π·Π°Π΄, Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π±Ρ‹Π»ΠΎ Π²Π»ΠΈΡ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сСгодня.

ΠšΠΎΡΡ‚Ρ‹Π»ΡŒ no-ff, ΠΏΠΎΠ»ΠΎΠΌΠ°Π½Π½Ρ‹ΠΉ bisect ΠΈ Π½Π΅Π²Π½ΡΡ‚Π½ΠΎΡΡ‚ΡŒ blame β€” симптомы Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π·Π°Π±ΠΈΠ²Π°Π΅Ρ‚Π΅ Π³Π²ΠΎΠ·Π΄ΠΈ ΠΎΡ‚Π²Π΅Ρ€Ρ‚ΠΊΠΎΠΉ.

ΠŸΠ΅Ρ€Π΅ΠΎΡΠΌΡ‹ΡΠ»Π΅Π½ΠΈΠ΅ контроля вСрсий

ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ вСрсий Π½ΡƒΠΆΠ΅Π½ для Π΄Π²ΡƒΡ… Π²Π΅Ρ‰Π΅ΠΉ.

ΠŸΠ΅Ρ€Π²Π°Ρ β€” для ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π² написании ΠΊΠΎΠ΄Π°. Π•ΡΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΊΠΈ со своСй ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΠΈ рСгулярно Π±Π΅ΠΊΠ°ΠΏΠΈΡ‚ΡŒ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ.

Вторая ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° β€” это ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅. Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ. НапримСр, Ρ€Π°Π±ΠΎΡ‚Π° Π½Π°Π΄ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Ρ€Π΅Π»ΠΈΠ·Π½ΠΎΠΉ вСрсиСй ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ Π±Π°Π³-фиксы ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ½ вСрсии. ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ Π±Ρ‹Π»ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ. БСсцСнный инструмСнт для диагностирования ошибок.

Π’Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ эти Π΄Π²Π΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ Π²ΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ Π² ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚.

ΠŸΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π½Π΅ΠΊΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π²Π°ΠΌ понадобятся рСгулярныС ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹. Однако, эти ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π»ΠΎΠΌΠ°ΡŽΡ‚ Π±ΠΈΠ»Π΄.

Π’ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎΠΌ ΠΌΠΈΡ€Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ истории вСрсий Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½ΠΎ ΠΈ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎ. Π—Π΄Π΅ΡΡŒ Π½Π΅Ρ‚ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², Ρ‡Ρ‚ΠΎ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ ΠΏΠΎΠΌΠ΅Ρ…ΠΈ. Π—Π΄Π΅ΡΡŒ Π½Π΅Ρ‚ гигантских ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π½Π° 10 000 строк. ΠžΠΏΡ€ΡΡ‚Π½Π°Ρ история позволяСт ΠΎΡ‚ΠΊΠ°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΊΠΈ ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠΈΠ΄Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Π΅Ρ‚ΠΊΠ°ΠΌΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ cherry-pick. ΠžΠΏΡ€ΡΡ‚Π½ΡƒΡŽ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΏΡ€ΠΎΡ‰Π΅ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Однако, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ чистоты истории ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ Π΄ΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ всСх ΠΏΡ€Π°Π²ΠΎΠΊ Π΄ΠΎ идСального состояния.

Π’Π°ΠΊ ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚Π΅ Π²Ρ‹? ЧастыС ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΠΈΠ»ΠΈ ΠΎΠΏΡ€ΡΡ‚Π½ΡƒΡŽ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ?

Если Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ Π²Π΄Π²ΠΎΠ΅ΠΌ Π½Π°Π΄ ΠΏΡ€Π΅Π΄Ρ€Π΅Π»ΠΈΠ·Π½Ρ‹ΠΌ стартапом, опрятная история ΠΏΠΎΠ΄ΠΊΡƒΠΏΠ°Π΅Ρ‚ нСсильно. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΈΡ‚ΡŒ всС подряд Π² master ΠΈ Π²Ρ‹ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Ρ€Π΅Π»ΠΈΠ·Ρ‹ ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ вздумаСтся.

Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π½Π°Ρ‡ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ увСличится, Π±ΡƒΠ΄ΡŒ Ρ‚ΠΎ рост ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ»ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ Π±Π°Π·Ρ‹, Π²Π°ΠΌ понадобятся инструмСнты для поддСрТания порядка. Бюда входят автоматичСскоС тСстированиС, code review ΠΈ опрятная история.

Π’Π΅Ρ‚ΠΊΠΈ feature выглядят ΡƒΠ΄Π°Ρ‡Π½Ρ‹ΠΌ компромиссом. Они Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‚ простыС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π’Ρ‹ Π΄ΡƒΠΌΠ°Π΅Ρ‚Π΅ ΠΎΠ± ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ Π² Π½Π°ΠΈΠΌΠ΅Π½Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΊΠΎΠ΄, Π½ΠΎ это ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя.

Когда ваш ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ достаточно разрастСтся, простой ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ branch / commit / merge развалится. ВрСмя примСнСния ΠΊΠ»Π΅ΠΉΠΊΠΎΠΉ Π»Π΅Π½Ρ‚Ρ‹ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΎΡΡŒ. Π’Π°ΠΌ Π½ΡƒΠΆΠ½Π° опрятная история ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.

Git Ρ€Π΅Π²ΠΎΠ»ΡŽΡ†ΠΈΠΎΠ½Π΅Π½, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π΄Π°Π΅Ρ‚ Π²Π°ΠΌ Π»ΡƒΡ‡ΡˆΠ΅Π΅ ΠΎΡ‚ Π΄Π²ΡƒΡ… ΠΌΠΈΡ€ΠΎΠ². МоТно Π΄Π΅Π»Π°Ρ‚ΡŒ частыС ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π² процСссС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ Ρ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΏΠΎ ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠΈ. Если это ваш ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, Ρ‚ΠΎ умолчания git ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ Π±ΠΎΠ»Π΅Π΅ осмыслСнными (имССтся Π² Π²ΠΈΠ΄Ρƒ fast-forward ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΡ€ΠΈ слиянии Π²Π΅Ρ‚ΠΎΠΊ β€” ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°).

ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ дСйствий

Π”ΡƒΠΌΠ°ΠΉΡ‚Π΅ ΠΎ Π²Π΅Ρ‚ΠΊΠ°Ρ… Π² Ρ€Π°Π·Ρ€Π΅Π·Π΅ Π΄Π²ΡƒΡ… ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ: ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Π΅ Π²Π΅Ρ‚ΠΊΠΈ ΠΈ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹Π΅.

ΠŸΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Π΅ Π²Π΅Ρ‚ΠΊΠΈ β€” это ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ история ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. ΠšΠΎΠΌΠΌΠΈΡ‚ Π² ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½Ρ‹ΠΌ, Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹ΠΌ ΠΈ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π΅ описаниС. Он Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΌ. Он Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π΅Π½. ΠŸΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Π΅ Π²Π΅Ρ‚ΠΊΠΈ это master ΠΈ release.

ΠŸΡ€ΠΈΠ²Π°Ρ‚Π½Π°Ρ Π²Π΅Ρ‚ΠΊΠ° для сСбя. Π­Ρ‚ΠΎ ваш Ρ‡Π΅Ρ€Π½ΠΎΠ²ΠΈΠΊ Π½Π° врСмя Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ.

НаиболСС бСзопасно Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹Π΅ Π²Π΅Ρ‚ΠΊΠΈ локально. Если Π²Π°ΠΌ трСбуСтся ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ push для синхронизации Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ ΠΈ домашнСго ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, сообщитС вашим ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌ, Ρ‡Ρ‚ΠΎ Π²Π΅Ρ‚ΠΊΠ° ваша ΠΈ Ρ‡Ρ‚ΠΎ Π½Π΅ стоит Π½Π° Π½Π΅Π΅ ΠΎΠΏΠΈΡ€Π°Ρ‚ΡŒΡΡ.

НС стоит Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ Π² ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΡƒΡŽ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΌ merge. Π‘ΠΏΠ΅Ρ€Π²Π° подчиститС Π²Π°ΡˆΡƒ Π²Π΅Ρ‚ΠΊΡƒ инструмСнтами Π²Ρ€ΠΎΠ΄Π΅ reset, rebase, merge —squash ΠΈ commit —amend.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ сСбя писатСлСм, Π° ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π³Π»Π°Π²Π°ΠΌΠΈ ΠΊΠ½ΠΈΠ³ΠΈ. ΠŸΠΈΡΠ°Ρ‚Π΅Π»ΠΈ Π½Π΅ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΡŽΡ‚ Ρ‡Π΅Ρ€Π½ΠΎΠ²ΠΈΠΊΠΈ. Майкл ΠšΡ€Π°ΠΉΡ‚ΠΎΠ½ сказал: Β«Π’Π΅Π»ΠΈΠΊΠΈΠ΅ ΠΊΠ½ΠΈΠ³ΠΈ Π½Π΅ написаны β€” ΠΎΠ½ΠΈ пСрСписаны».

Если Π²Ρ‹ ΠΏΡ€ΠΈΡˆΠ»ΠΈ с Π΄Ρ€ΡƒΠ³ΠΈΡ… VCS, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ истории Π²Π°ΠΌ покаТСтся Ρ‚Π°Π±Ρƒ. Π’Ρ‹ исходитС ΠΈΠ· Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ любой ΠΊΠΎΠΌΠΌΠΈΡ‚ высСчСн Π² ΠΊΠ°ΠΌΠ½Π΅. БлСдуя этой Π»ΠΎΠ³ΠΈΠΊΠ΅, Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ Β«undoΒ» ΠΈΠ· тСкстовых Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ².

ΠŸΡ€Π°Π³ΠΌΠ°Ρ‚ΠΈΠΊΠΈ заботятся ΠΎ ΠΏΡ€Π°Π²ΠΊΠ°Ρ… Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€ ΠΏΠΎΠΊΠ° эти ΠΏΡ€Π°Π²ΠΊΠΈ Π½Π΅ становятся Π½Π°Π΄ΠΎΠ΅Π΄Π»ΠΈΠ²Ρ‹ΠΌΠΈ. Для ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ управлСния Π½Π°ΠΌ Π²Π°ΠΆΠ½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ измСнСния. ΠŸΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ всСго-лишь лСгковСсный Π±ΡƒΡ„Π΅Ρ€ с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‚ΠΌΠ΅Π½Ρ‹.

Если Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΊΠ°ΠΊ Π½Π΅Ρ‡Ρ‚ΠΎ нСзапятнанноС, Ρ‚ΠΎ fast-forward слияниС Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ бСзопасно Π½ΠΎ ΠΈ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ. Оно ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΡΡ‚ΡŒ истории, Π΅Π΅ ΠΏΡ€ΠΎΡ‰Π΅ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ.

ЕдинствСнный ΠΎΡΡ‚Π°Π²ΡˆΠΈΠΉΡΡ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π·Π° —no-ff β€” это Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ слияния для ассоциации с послСднСй вСрсиСй ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ½ ΠΊΠΎΠ΄Π°. Π­Ρ‚ΠΎ Π°Π½Ρ‚ΠΈΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ‚Π΅Π³ΠΈ.

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

Π― ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ 3 простых ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Π² зависимости ΠΎΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° измСнСния, Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π°Π΄ Π½ΠΈΠΌ ΠΈ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π΄Π°Π»Π΅ΠΊΠΎ Π²Π΅Ρ‚ΠΊΠ° ΡƒΡˆΠ»Π° Π² сторону.

Быстрая ΠΏΡ€Π°Π²ΠΊΠ°

Π‘ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ чистка это всСго лишь squash ΠΊΠΎΠΌΠΌΠΈΡ‚.
Допустим, я создал Π²Π΅Ρ‚Π²ΡŒ feature ΠΈ сдСлал нСсколько ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠΈ часа.

git checkout -b private_feature_branch
touch file1.txt
git add file1.txt
git commit -am "WIP"

Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ я Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ», вмСсто простого merge, дСлаю слСдущСС:

git checkout master
git merge --squash private_feature_branch
git commit -v

Π—Π°Ρ‚Π΅ΠΌ Ρ‚Ρ€Π°Ρ‡Ρƒ ΠΌΠΈΠ½ΡƒΡ‚Ρƒ Π½Π° написаниС Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ³ΠΎ коммСнтария ΠΊ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρƒ.

ΠŸΡ€Π°Π²ΠΊΠ° побольшС

Π’Ρ€Π΅ΠΌΠ΅Π½Π°ΠΌΠΈ рСализация Ρ„ΠΈΡ‡ΠΈ разрастаСтся Π² ΠΌΠ½ΠΎΠ³ΠΎΠ΄Π½Π΅Π²Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ с мноТСством ΠΌΠ΅Π»ΠΊΠΈΡ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ².

Π― Ρ€Π΅ΡˆΠ°ΡŽ, Ρ‡Ρ‚ΠΎ моя ΠΏΡ€Π°Π²ΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π° Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π»ΠΊΠΈΠ΅ части, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ squash слишком Π³Ρ€ΡƒΠ±Ρ‹ΠΉ инструмСнт. (Π’ качСствС повсСднСвного ΠΏΡ€Π°Π²ΠΈΠ»Π° я ΡΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽ сСбя: Β«Π›Π΅Π³ΠΊΠΎ Π»ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ code review?Β»)

Если ΠΌΠΎΠΈ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π±Ρ‹Π»ΠΈ Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π²ΠΏΠ΅Ρ€Π΅Π΄, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ rebase Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅.

Π˜Π½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ ΠΌΠΎΠ³ΡƒΡ‡. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ для рСдактирования старых ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², раздСлСния ΠΈΠ»ΠΈ упорядочивания ΠΎΠ½Ρ‹Ρ… ΠΈ, Π² Π΄Π°Π½Π½ΠΎΠΌ случаС, для объСдинСния Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ….

Π’ Π²Π΅Ρ‚ΠΊΠ΅ feature:

git rebase --interactive master

ΠžΡ‚ΠΊΡ€ΠΎΠ΅Ρ‚ΡΡ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ со списком ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ². КаТдая строка это: ΠΊΠΎΠΌΠ°Π½Π΄Π°, которая Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π°, SHA1 Ρ…ΡΡˆ ΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ ΠΊ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρƒ. Π’Π½ΠΈΠ·Ρƒ Π΅ΡΡ‚ΡŒ список Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄.

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° стоит Β«pickΒ», Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Β«ΠΊΠΎΠΌΠΌΠΈΡ‚ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΒ».

pick ccd6e62 Work on back button
pick 1c83feb Bug fixes
pick f9d0c33 Start work on toolbar

МСняю ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π½Π° Β«squashΒ», которая ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌ.

pick ccd6e62 Work on back button
squash 1c83feb Bug fixes
pick f9d0c33 Start work on toolbar

Π‘ΠΎΡ…Ρ€Π°Π½ΡΡŽ, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ ΠΊ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Π½ΠΎΠΌΡƒ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρƒ. ВсС, Π³ΠΎΡ‚ΠΎΠ²ΠΎ.

ΠΠ΅ΡΠΎΡΡ‚ΠΎΡΠ²ΡˆΠΈΠ΅ΡΡ Π²Π΅Ρ‚ΠΊΠΈ

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Π΅Ρ‚ΠΊΠ° feature просущСствовала Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ врСмя ΠΈ Π² Π½Π΅Π΅ сливались Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²Π΅Ρ‚ΠΊΠΈ для поддСрТания Π΅Π΅ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π˜ΡΡ‚ΠΎΡ€ΠΈΡ слоТна ΠΈ Π·Π°ΠΏΡƒΡ‚Π°Π½Π°. ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π²Π·ΡΡ‚ΡŒ Π³Ρ€ΡƒΠ±Ρ‹ΠΉ diff ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ.

git checkout master
git checkout -b cleaned_up_branch
git merge --squash private_feature_branch
git reset

Π’Π΅ΠΏΠ΅Ρ€ΡŒ рабочая дирСктория ΠΏΠΎΠ»Π½Π° ΠΌΠΎΠΈΡ… ΠΏΡ€Π°Π²ΠΎΠΊ ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ наслСдия ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠΈ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π±Π΅Ρ€Π΅ΠΌ ΠΈ Ρ€ΡƒΡ‡ΠΊΠ°ΠΌΠΈ добавляСм ΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΈΠΌ ΠΏΡ€Π°Π²ΠΊΠΈ.

Π Π΅Π·ΡŽΠΌΠΈΡ€ΡƒΠ΅ΠΌ

Если Π²Ρ‹ Π±ΠΎΡ€Π΅Ρ‚Π΅ΡΡŒ с умолчаниями Π² git, спроситС сСбя ΠΏΠΎΡ‡Π΅ΠΌΡƒ.

Π‘Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΡƒΡŽ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΠΎΠΉ, Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΠΉ ΠΈ Π»Π΅Π³ΠΊΠΎ прослСТиваСмой.

Π‘Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½ΡƒΡŽ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ измСняСмой ΠΈ Π³ΠΈΠ±ΠΊΠΎΠΉ.

ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ дСйствий Ρ‚Π°ΠΊΠΎΠ²:

  • Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½ΠΎΠ΅ ΠΎΡ‚Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΡ‚ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ.
  • ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‡Π½ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π² эту ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ.
  • Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ΄ достиг ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²Π°, ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠΌ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ Π² порядок.
  • Π‘Π»ΠΈΠ²Π°Π΅ΠΌ ΡƒΠΏΠΎΡ€ΡΠ΄ΠΎΡ‡Π΅Π½Π½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΡƒΡŽ.

Как Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ осмыслСнныС ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹. ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠ΅ΠΌ стандарт Conventional Commits / Π‘Π»ΠΎΠ³ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ЯндСкс / Π₯Π°Π±Ρ€

ΠŸΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹ΠΉ хаос Π² названиях ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ². Знакомая ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Π°?

НавСрняка Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅ git-flow. Π­Ρ‚ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ соглашСний ΠΏΠΎ ΡƒΠΏΠΎΡ€ΡΠ΄ΠΎΡ‡ΠΈΠ²Π°Π½ΠΈΡŽ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π²Π΅Ρ‚ΠΊΠ°ΠΌΠΈ Π² Git. Он Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ ΠΈ ΡˆΠΈΡ€ΠΎΠΊΠΎ распространСн. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΌΡ‹ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎΠ± этом, Π½ΠΎ, ΠΊ соТалСнию, удСляСм слишком ΠΌΠ°Π»ΠΎ внимания вопросу наимСнования ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², поэтому часто сообщСния Π² Git ΠΏΠΈΡˆΡƒΡ‚ΡΡ бСссистСмно.

МСня Π·ΠΎΠ²ΡƒΡ‚ Π•Ρ€ΠΆΠ°Π½ Π’Π°ΡˆΠ±Π΅Π½Π±Π΅Ρ‚ΠΎΠ², я Ρ€Π°Π±ΠΎΡ‚Π°ΡŽ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄ ЯндСкс.ΠœΠ°Ρ€ΠΊΠ΅Ρ‚Π°. И сСгодня я расскаТу читатСлям Π₯Π°Π±Ρ€Π°, ΠΊΠ°ΠΊΠΈΠ΅ инструмСнты для создания осмыслСнных ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅. ΠŸΡ€ΠΈΠ³Π»Π°ΡˆΠ°ΡŽ ΠΏΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒΡΡ ΠΊ ΠΎΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΡŽ этой Ρ‚Π΅ΠΌΡ‹.


ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ договорСнностСй ΠΏΡ€ΠΈ наимСнования ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² затрудняСт Ρ€Π°Π±ΠΎΡ‚Ρƒ с историСй Π² Git. Π’Π°ΠΊΠΎΠ΅ Π±Ρ‹Π»ΠΎ Π² нашСй ΠΊΠΎΠΌΠ°Π½Π΄Π΅. Π”ΠΎ использования ΠΎΠ±Ρ‰Π΅Π³ΠΎ для всСх Ρ€Π΅Π³Π»Π°ΠΌΠ΅Π½Ρ‚Π° ΠΈ внСдрСния Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ выглядСли ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

SECRETMRKT-700: ΠΏΡ€ΠΎΠΏΠ°Π»ΠΈ Π»ΠΎΠ³ΠΎΡ‚ΠΈΠΏΡ‹ ΠΏΠ°Ρ€Ρ‚Π½Π΅Ρ€ΠΎΠ²
ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠ°Π΄Π°Π΅Ρ‚, ΠΏΠΎΠΏΡ€Π°Π²ΠΈΠ».
SECRETMRKT-701, SECRETMRKT-702: ΠžΡ‚Ρ†Π΅Π½Ρ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Π» ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ Π½Π° всСх ...

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ писал сообщСния ΠΊΠ°ΠΊ Ρ…ΠΎΡ‚Π΅Π»: ΠΊΡ‚ΠΎ-Ρ‚ΠΎ описывал Π·Π°Π΄Π°Ρ‡Ρƒ, ΠΊΡ‚ΠΎ-Ρ‚ΠΎ пСрСчислял внСсСнныС измСнСния, ΠΊΡ‚ΠΎ-Ρ‚ΠΎ использовал Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ случайных Ρ„Ρ€Π°Π·. Всё Π±Ρ‹Π»ΠΎ Π²Ρ€Π°Π·Π½ΠΎΠ±ΠΎΠΉ. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, Π½ΠΎΠΌΠ΅Ρ€Π° Π·Π°Π΄Π°Ρ‡, ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Π²ΡˆΠΈΠ΅ Π² ΠΊΠΎΠΌΠΌΠΈΡ‚Π°Ρ…, часто ΡƒΠΊΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π»ΠΈ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ тСкст. Всё это мСшало эффСктивно Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с историСй Π² Git.

По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ ΠΌΡ‹ Π²Π½Π΅Π΄Ρ€ΠΈΠ»ΠΈ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ стандарт Conventional Commits, стали Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π² консольной ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π΅ commitizen ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ commitlint. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ измСнились ΠΈ стали выглядит Ρ‚Π°ΠΊ:

refactor(tutorial): ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ эпиков Π² Ρ‚ΡƒΠ»Ρ‚ΠΈΠΏΠ°Ρ…
feat(products): Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π±Π°Π½Π΅Ρ€ с Π½ΠΎΠ²ΠΎΠ³ΠΎΠ΄Π½ΠΈΠΌΠΈ скидками
fix(products): ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π² Π±Π°Π½Π΅Ρ€Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π΄Π°Ρ‚Ρ‹

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΈ Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Π²Π°Ρ‚ΡŒ внСсСнныС измСнСния стало ΠΏΡ€ΠΎΡ‰Π΅. ΠœΡ‹ Π½Π΅ ΠΎΡ‚ΠΊΠ°Π·Π°Π»ΠΈΡΡŒ ΠΎΡ‚ указания Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² Π·Π°Π΄Π°Ρ‡, всё Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π½ΠΎ пСрСнСсСно Π²Π½ΡƒΡ‚Ρ€ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² согласно ΠΊΠΎΠ½Π²Π΅Π½Ρ†ΠΈΠΈ Conventional Commits.

Π”Π°Π»ΡŒΡˆΠ΅ я расскаТу, ΠΊΠ°ΠΊ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ схоТСго порядка Π² Git.


Π›ΡƒΡ‡ΡˆΠΈΠ΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ, Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΈ распространСнныС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΈ Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ²

Если ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π² индустрии, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹:

  • Π‘Ρ‚Π°Ρ‚ΡŒΠΈ с ΠΎΠ±Ρ‰ΠΈΠΌΠΈ совСтами ΠΏΠΎ написанию ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ². По большСй части ΠΎΠ½ΠΈ Π²ΠΏΠΎΠ»Π½Π΅ Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ ΠΈ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ Ρ€Π°ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ Ρ‚Π΅ΠΌΡƒ, Π½ΠΎ чувствуСтся Π±Π΅ΡΠΏΠΎΡ€ΡΠ΄ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ ΠΈ отсутствиС комплСксного Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ вопроса.
  • Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Ρ‹ ΠΏΠΎ написанию ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ². Π˜Ρ… Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ. Они ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ с Ρ‡Π΅Ρ‚ΠΊΠΈΠΌ ΠΏΠ΅Ρ€Π΅Ρ‡Π½Π΅ΠΌ ΠΏΡ€Π°Π²ΠΈΠ», довольно часто написанных ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ для ΠΊΡ€ΡƒΠΏΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈΠ»ΠΈ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ°. Π­Ρ‚ΠΈ стандарты ΠΏΠΎΠ΄ΠΊΡƒΠΏΠ°ΡŽΡ‚ систСмным ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠΌ, ΠΏΠΎΠΏΡƒΠ»ΡΡ€Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ Π² open-source сообщСствС.

Нам Π½ΡƒΠΆΠ½ΠΎ большС порядка Π² ΠΊΠΎΠΌΠΌΠΈΡ‚Π°Ρ…!

ΠœΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΡ Conventional Commits выдСляСтся Π½Π° Ρ„ΠΎΠ½Π΅ Π΄Ρ€ΡƒΠ³ΠΈΡ… стандартов ΠΈ заслуТиваСт ΠΏΡ€ΠΈΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ изучСния ΠΏΠΎ ряду ΠΏΡ€ΠΈΡ‡ΠΈΠ½:

  1. Она Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π° ΠΈ ΠΏΡ€ΠΎΡ€Π°Π±ΠΎΡ‚Π°Π½Π°. Π’ Π΅Ρ‘ спСцификации Π΄Π°Π½Ρ‹ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ Π½Π° Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнныС вопросы.
  2. Π‘ΠΎΠ·Π΄Π°Ρ‚Π΅Π»ΠΈ ΠΊΠΎΠ½Π²Π΅Π½Ρ†ΠΈΠΈ Π²Π΄ΠΎΡ…Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡŒ трСбованиями ΠΊ написанию ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² популярном ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ΅ AngularJS.
  3. ΠŸΡ€Π°Π²ΠΈΠ» ΠΊΠΎΠ½Π²Π΅Π½Ρ†ΠΈΠΈ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ нСсколько ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… ΠΈ популярных open-source Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ (Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ yargs ΠΈ lerna).
  4. К плюсам отнСсу ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΡƒ ΠΊ автоматичСскому Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Release Notes ΠΈ Change Log.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° ΠΏΠΎ этому стандарту:

fix(products): ΠΏΠΎΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π΄Π»ΠΈΠ½Ρƒ строки с Ρ†Π΅Π½ΠΎΠΉ

Π§Π°ΡΡ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ отобраТаСтся Π² мобильной вСрсии ΠΈΠ·-Π·Π° ошибок
Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ².

ΠœΠ•Π’Π ДАННЫЕ: SECRETMRKT-578, SECRETMRKT-602


ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ тСзисы Conventional Commits

  • Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ структуры ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ²:

    <type>(<scope>): <subject>

    <body>

    <footer>

  • Π£ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π΅Π»ΠΎ ΠΈ Π½ΠΈΠΆΠ½ΠΈΠΉ ΠΊΠΎΠ»ΠΎΠ½Ρ‚ΠΈΡ‚ΡƒΠ».
  • Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ с Ρ‚ΠΈΠΏΠ° (type), ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ Π½Π° спСцифику внСсСнных Π² ΠΊΠΎΠ΄ΠΎΠ²ΡƒΡŽ Π±Π°Π·Ρƒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒΡΡ описаниСм.
  • Наряду с ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ feat, fix (использованиС ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… строго Ρ€Π΅Π³Π»Π°ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ), Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹.
  • Π£ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ (scope). Она Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΠ·ΡƒΠ΅Ρ‚ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π·Π°Ρ‚Ρ€ΠΎΠ½ΡƒΠ»ΠΈ измСнСния. ΠžΠ±Π»Π°ΡΡ‚ΡŒ слСдуСт Π·Π° Ρ‚ΠΈΠΏΠΎΠΌ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ Π½Π΅ Ρ€Π΅Π³Π»Π°ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‡Π΅Ρ‚ΠΊΠΈΠΉ список областСй. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ областСй: eslint, git, analytics ΠΈ Ρ‚.Π΄.
  • ОписаниС ΠΊΠΎΠΌΠΌΠΈΡ‚Π° Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ сразу послС Ρ‚ΠΈΠΏΠ°/области.
  • Π’Π΅Π»ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использовано для Π΄Π΅Ρ‚Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. Π’Π΅Π»ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»Π΅Π½ΠΎ ΠΎΡ‚ описания пустой строкой.
  • НиТний ΠΊΠΎΠ»ΠΎΠ½Ρ‚ΠΈΡ‚ΡƒΠ» слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для указания Π²Π½Π΅ΡˆΠ½ΠΈΡ… ссылок, контСкста ΠΊΠΎΠΌΠΌΠΈΡ‚Π° ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΌΠ΅Ρ‚Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. НиТний ΠΊΠΎΠ»ΠΎΠ½Ρ‚ΠΈΡ‚ΡƒΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»Π΅Π½ ΠΎΡ‚ Ρ‚Π΅Π»Π° пустой строкой.
ΠšΡ€ΠΎΠΌΠ΅ пСрСчислСных Π² ΠΊΠΎΠ½Π²Π΅Π½Ρ†ΠΈΠΈ ΠΏΡ€Π°Π²ΠΈΠ» ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ слСдущиС популярныС Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ:

  • Π’ Ρ‚Π΅Π»Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° пишСм Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ.
  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ²:











    buildΠ‘Π±ΠΎΡ€ΠΊΠ° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈΠ»ΠΈ измСнСния Π²Π½Π΅ΡˆΠ½ΠΈΡ… зависимостСй
    ciНастройка CI ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° со скриптами
    docsОбновлСниС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ
    featΠ”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π°
    fixΠ˜ΡΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ошибок
    perfИзмСнСния Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ Π½Π° ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ
    refactorΠŸΡ€Π°Π²ΠΊΠΈ ΠΊΠΎΠ΄Π° Π±Π΅Π· исправлСния ошибок ΠΈΠ»ΠΈ добавлСния Π½ΠΎΠ²Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ
    revertΠžΡ‚ΠΊΠ°Ρ‚ Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹
    styleΠŸΡ€Π°Π²ΠΊΠΈ ΠΏΠΎ кодстайлу (Ρ‚Π°Π±Ρ‹, отступы, Ρ‚ΠΎΡ‡ΠΊΠΈ, запятыС ΠΈ Ρ‚.Π΄.)
    testΠ”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ тСстов
  • ПишСм описаниС Π² ΠΏΠΎΠ²Π΅Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌ Π½Π°ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠΈ (imperative mood), Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ сам Git.

    Merge branch ‘fix/SECRETMRKT-749-fix-typos-in-titles’

  • НС Π·Π°ΠΊΠ°Ρ‡ΠΈΠ²Π°Π΅ΠΌ описаниС ΠΊΠΎΠΌΠΌΠΈΡ‚Π° Π·Π½Π°ΠΊΠ°ΠΌΠΈ прСпинания.

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Conventional Commits ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΊΠΎΡ‚Ρ€ΠΈΠ±ΡŒΡŽΡ‚ΠΎΡ€Ρ‹ lerna


НуТно Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ удобства. Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этого вопроса Π½Π°ΠΌ потрСбуСтся Π΄Π²Π° инструмСнта: Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² ΠΈ Π»ΠΈΠ½Ρ‚Π΅Ρ€ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², настроСнный Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΡƒΡˆΠ΅ΠΌ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ.


Π­Ρ‚ΠΎΡ‚ инструмСнт позволяСт Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ встроСнного Π²ΠΈΠ·Π°Ρ€Π΄Π°. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, commitizen Ρ…ΠΎΡ€ΠΎΡˆΠΎ поддСрТиваСтся сообщСством ΠΈ, благодаря Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ модулям, ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ настраиваСтся.

  1. Установим ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ commitizen глобально (Π²Π°ΠΌ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€Π°Π²Π° администратора).
    npm i -g commitizen
  2. Π‘Π»Π΅Π΄ΠΎΠΌ установим Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ cz-customizable. Он Π½ΡƒΠΆΠ΅Π½ для настройки шаблона с вопросами, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° commitizen.
    npm i -D cz-customizable
  3. Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Ρ„Π°ΠΉΠ» commitizen.js, ΠΎΠ½ Π½ΡƒΠΆΠ΅Π½ для настройки cz-customizable. ΠŸΠΎΠΌΠ΅ΡΡ‚ΠΈΠΌ созданный Ρ„Π°ΠΉΠ» Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽΒ ./config/git. Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ Π½Π΅ Π·Π°Ρ…Π»Π°ΠΌΠ»ΡΡ‚ΡŒ ΠΊΠΎΡ€Π΅Π½ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΈ ΡΡ‚Π°Ρ€Π°Ρ‚ΡŒΡΡ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ Π² ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½ΠΎΠΉ для этого ΠΏΠ°ΠΏΠΊΠ΅. Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅:ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ commitizen.js
    "use strict";
    
    module.exports = {
      // Π”ΠΎΠ±Π°Π²ΠΈΠΌ описаниС Π½Π° русском языкС ΠΊΠΎ всСм Ρ‚ΠΈΠΏΠ°ΠΌ
      types: [
        {
          value: "build",
          name: "build:     Π‘Π±ΠΎΡ€ΠΊΠ° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈΠ»ΠΈ измСнСния Π²Π½Π΅ΡˆΠ½ΠΈΡ… зависимостСй"
        },
        { value: "ci", name: "ci:        Настройка CI ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° со скриптами" },
        { value: "docs", name: "docs:      ОбновлСниС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ" },
        { value: "feat", name: "feat:      Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π°" },
        { value: "fix", name: "fix:       Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ошибок" },
        {
          value: "perf",
          name: "perf:      ИзмСнСния Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ Π½Π° ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ"
        },
        {
          value: "refactor",
          name:
            "refactor:  ΠŸΡ€Π°Π²ΠΊΠΈ ΠΊΠΎΠ΄Π° Π±Π΅Π· исправлСния ошибок ΠΈΠ»ΠΈ добавлСния Π½ΠΎΠ²Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ"
        },
        { value: "revert", name: "revert:    ΠžΡ‚ΠΊΠ°Ρ‚ Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹" },
        {
          value: "style",
          name:
            "style:     ΠŸΡ€Π°Π²ΠΊΠΈ ΠΏΠΎ кодстайлу (Ρ‚Π°Π±Ρ‹, отступы, Ρ‚ΠΎΡ‡ΠΊΠΈ, запятыС ΠΈ Ρ‚.Π΄.)"
        },
        { value: "test", name: "test:      Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ тСстов" }
      ],
    
      // ΠžΠ±Π»Π°ΡΡ‚ΡŒ. Она Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΠ·ΡƒΠ΅Ρ‚ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π·Π°Ρ‚Ρ€ΠΎΠ½ΡƒΠ»ΠΈ измСнСния
      scopes: [
        { name: "components" },
        { name: "tutorial" },
        { name: "catalog" },
        { name: "product" }
      ],
    
      // Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°Π΄Π°Ρ‚ΡŒ спСц ΠžΠ‘Π›ΠΠ‘Π’Π¬ для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΊΠΎΠΌΠΌΠΈΡ‚Π° (ΠΏΡ€ΠΈΠΌΠ΅Ρ€ для 'fix')
      /*
      scopeOverrides: {
        fix: [
          {name: 'style'},
          {name: 'e2eTest'},
          {name: 'unitTest'}
        ]
      },
      */
    
      // ПомСняСм Π΄Π΅Ρ„ΠΎΠ»Ρ‚Π½Ρ‹Π΅ вопросы
      messages: {
        type: "КакиС измСнСния Π²Ρ‹ вноситС?",
        scope: "\nΠ’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠžΠ‘Π›ΠΠ‘Π’Π¬, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ (ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ):",
        // Бпросим Ссли allowCustomScopes Π² true
        customScope: "Π£ΠΊΠ°ΠΆΠΈΡ‚Π΅ свою ΠžΠ‘Π›ΠΠ‘Π’Π¬:",
        subject: "ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠšΠžΠ ΠžΠ’ΠšΠžΠ• описаниС Π² ΠŸΠžΠ’Π•Π›Π˜Π’Π•Π›Π¬ΠΠžΠœ Π½Π°ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠΈ:\n",
        body:
          'ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠŸΠžΠ”Π ΠžΠ‘ΠΠžΠ• описаниС (ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ). Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ "|" для Π½ΠΎΠ²ΠΎΠΉ строки:\n',
        breaking: "Бписок BREAKING CHANGES (ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ):\n",
        footer:
          "ΠœΠ΅ΡΡ‚ΠΎ для ΠΌΠ΅Ρ‚Π° Π΄Π°Π½Π½Ρ‹Ρ… (Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΎΠ², ссылок ΠΈ ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ). НапримСр: SECRETMRKT-700, SECRETMRKT-800:\n",
        confirmCommit: "Вас устраиваСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠΈΠΉΡΡ ΠΊΠΎΠΌΠΌΠΈΡ‚?"
      },
    
      // Π Π°Π·Ρ€Π΅ΡˆΠΈΠΌ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ ΠžΠ‘Π›ΠΠ‘Π’Π¬
      allowCustomScopes: true,
    
      // Π—Π°ΠΏΡ€Π΅Ρ‚ Π½Π° Breaking Changes
      allowBreakingChanges: false,
    
      // ΠŸΡ€Π΅Ρ„ΠΈΠΊΡ для Π½ΠΈΠΆΠ½Π΅Π³ΠΎ ΠΊΠΎΠ»ΠΎΠ½Ρ‚ΠΈΡ‚ΡƒΠ»Π°
      footerPrefix: "ΠœΠ•Π’Π ДАННЫЕ:",
    
      // limit subject length
      subjectLimit: 72
    };
  4. Π”ΠΎΠ±Π°Π²ΠΈΠΌ Π² package.json ссылки Π½Π° cz-customizable ΠΈ созданный Ρ€Π°Π½Π΅Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»:ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒ package.json
    {
      "config": {
        "commitizen": {
          "path": "node_modules/cz-customizable"
        },
        "cz-customizable": {
          "config": "config/git/commitizen.js"
        }
      },
    }

  5. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠΈΠΉΡΡ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. НабСритС Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:
    git cz

Π’ΠΈΠ·Π°Ρ€Π΄ commitizen сначала собСрСт ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΈΠΏΠ΅, области ΠΊΠΎΠΌΠΌΠΈΡ‚Π°, Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ запросит тСкст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π² описании, Π² Ρ‚Π΅Π»Π΅, Π² Π½ΠΈΠΆΠ½Π΅ΠΌ ΠΊΠΎΠ»ΠΎΠ½Ρ‚ΠΈΡ‚ΡƒΠ»Π΅ ΠΈ послС вашСго согласия создаст ΠΊΠΎΠΌΠΌΠΈΡ‚.

ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ посмотритС Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Ρ‹ настроСнной ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ commitizen ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊ Π½Π΅ΠΌΡƒ Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π° cz-cusomizable


  1. Установим Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ husky ΠΈ commitlint:
    npm i -D husky @commitlint/cli
  2. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ husky Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ². Для этого Π² package.json сразу послС скриптов Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ…ΡƒΠΊ ΠΈ ΡƒΠΊΠ°ΠΆΠ΅ΠΌ Π² Π½Π΅ΠΌ ссылку Π½Π° Ρ„Π°ΠΉΠ» commitlint.js:ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒ package.json
    {
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "husky": {
        "hooks": {
          "commit-msg": "commitlint -E HUSKY_GIT_PARAMS -g './config/git/commitlint.js'"
        }
      },
      "devDependencies": {
        "@commitlint/cli": "^7.2.1",
        "husky": "^1.1.3",
    }
  3. Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Ρ„Π°ΠΉΠ» commitlint.js, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π»ΠΈΠ½Ρ‚Π΅Ρ€Π°. ΠŸΠΎΠΌΠ΅ΡΡ‚ΠΈΠΌ созданный Ρ„Π°ΠΉΠ» Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ ./config/git. Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ Ρ„Π°ΠΉΠ»Π°:ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ commitlint.js
    // Ѐайл создан на основС @commitlint/config-conventional
    
    module.exports = {
      rules: {
        // Π’Π΅Π»ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ с пустой строки
        "body-leading-blank": [2, "always"],
    
        // НиТний ΠΊΠΎΠ»ΠΎΠ½Ρ‚ΠΈΡ‚ΡƒΠ» ΠΊΠΎΠΌΠΌΠΈΡ‚Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ с пустой строки
        "footer-leading-blank": [2, "always"],
    
        // Максимальная длина заголовка 72 символа
        "header-max-length": [2, "always", 72],
    
        // ΠžΠ±Π»Π°ΡΡ‚ΡŒ всСгда Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Π½ΠΈΠΆΠ½Π΅ΠΌ рСгистрС
        "scope-case": [2, "always", "lower-case"],
    
        // ОписаниС Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ пустым
        "subject-empty": [2, "never"],
    
        // ОписаниС Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ '.'
        "subject-full-stop": [2, "never", "."],
    
        // Π’ΠΈΠΏ всСгда Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Π½ΠΈΠΆΠ½Π΅ΠΌ рСгистрС
        "type-case": [2, "always", "lower-case"],
    
        // Π’ΠΈΠΏ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ пустым
        "type-empty": [2, "never"],
    
        // ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΠΌ всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ²
        "type-enum": [
          2,
          "always",
          [
            "build",
            "ci",
            "docs",
            "feat",
            "fix",
            "perf",
            "refactor",
            "revert",
            "style",
            "test"
          ]
        ]
      }
    };

Всё. Π’Π΅ΠΏΠ΅Ρ€ΡŒ всС ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒΡΡ ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΎΠΉ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ πŸ™‚

ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ посмотритС Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Ρ‹ настроСнной ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ commitlint


Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ commitizen ΠΈΠ»ΠΈ commitlint?

И Ρ‚ΠΎ, ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ΅! Π’ связкС ΠΎΠ½ΠΈ приносят ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚: ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΈΡ… провСряСт.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ стандарты Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ²Π΅Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π½Π°ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅?

Π­Ρ‚ΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ интСрСсный вопрос. ΠšΠΎΠΌΠΌΠΈΡ‚ это ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°, сообщСниС Π² ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡ†Π΅Π½ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ ΠΏΠΎ измСнСнию этого ΠΊΠΎΠ΄Π°. Π‘Π΄Π΅Π»Π°Ρ‚ΡŒ, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ, Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ, ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ, ΠΏΠΎΠΏΡ€Π°Π²ΠΈΡ‚ΡŒβ€Š β€” всё это ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ инструкции для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°.

ΠšΡΡ‚Π°Ρ‚ΠΈ, ΠΏΠΎΠ²Π΅Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π½Π°ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π½ΠΎ Π² самой систСмС вСрсионирования Git:

[[imperative-mood]]
Describe your changes in imperative mood, e.g. "make xyzzy do frotz"
instead of "[This patch] makes xyzzy do frotz" or "[I] changed xyzzy
to do frotz", as if you are giving orders to the codebase to change
its behavior.

Π—Π°Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ½Π²Π΅Π½Ρ†ΠΈΠΉ? Π‘Ρ‚ΠΎΠΈΡ‚ Π»ΠΈ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π½Π° это врСмя? Какой Π² этом ΠΏΡ€ΠΎΡ„ΠΈΡ‚?

Π‘Ρ‚ΠΎΠΈΡ‚. Π’ Ρ†Π΅Π»ΠΎΠΌ я Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ», Ρ‡Ρ‚ΠΎ ΠΌΡ‹ стали ΠΎΡ…ΠΎΡ‚Π½Π΅Π΅ Π΄Π΅Ρ‚Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ измСнСния, внСсСнныС Π² ΠΊΠΎΠ΄ΠΎΠ²ΡƒΡŽ Π±Π°Π·Ρƒ. Π’ Ρ‚Π΅Π»Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° ΠΌΡ‹ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ расписываСм ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π΅ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. Π Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ Π² истории стало ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΏΡ€ΠΎΡ‰Π΅. Плюс наш ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ развиваСтся, ΠΈ ΠΌΡ‹ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ пополнСния Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅. Π£Π²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ благодаря Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΡŽ стандарта ΠΈ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π»Π΅Π³Ρ‡Π΅ Π²ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒΡΡ Π² процСсс Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΈ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅ΡΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ.

ΠŸΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ссылки:

Git для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…. Π§Π°ΡΡ‚ΡŒ 5. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ рСпозитория ΠΈ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚

Π’ этом ΡƒΡ€ΠΎΠΊΠ΅ ΠΌΡ‹ рассмотрим, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ пустой git Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² Π½Π΅Π³ΠΎ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚. Π’Π°ΠΊΠΆΠ΅ коснСмся вопроса просмотра ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² ΠΈ состояния Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°.

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, для Π½Π°Ρ‡Π°Π»Π°, создайтС ΠΏΠ°ΠΏΠΊΡƒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ. Π’ нашСм случаС это Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ с Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ repo.

> mkdir repo

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ Π² этот ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³.

>cd repo

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π² Π½Π΅ΠΌ пустой git Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ.

> git init

Если ΠΌΡ‹ посмотрим Π½Π° список ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Ρ‹ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, Ρ‚ΠΎ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ пустой – это ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, Ρ‚.ΠΊ. ΠΌΡ‹ ΠΏΠΎΠΊΠ° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ создали Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎ Π΅Ρ‰Ρ‘ Ρ‚ΡƒΠ΄Π° Π½Π΅ отправляли.

> git log
fatal: your current branch 'master' does not have any commits yet

Для просмотра состояния Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉΒ git status.

> git status
On branch master

Initial commit

nothing to commit (create/copy files and use "git add" to track)

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π² нашСм ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ пустой Ρ„Π°ΠΉΠ».

> touch README.md

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ссли ΠΌΡ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git status, Ρ‚ΠΎ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² нашСм ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ появился ΠΎΠ΄ΠΈΠ½ нСотслСТиваСмый Ρ„Π°ΠΉΠ»: README.md.

> git status
On branch master

Initial commit

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        README.md

nothing added to commit but untracked files present (use "git add" to track)

Π”ΠΎΠ±Π°Π²ΠΈΠΌ, созданный Ρ„Π°ΠΉΠ» Π² stage. Stage (ΠΈΠ»ΠΈ cache) – это Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ для Ρ„Π°ΠΉΠ»ΠΎΠ² с измСнСниями, информация ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΠΏΠ°Π΄Π΅Ρ‚ Π² Π΅Π΄ΠΈΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚. Stage являСтся элСмСнтом Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ Ρ‚Ρ€Π΅Ρ… Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π², Π½Π° Π±Π°Π·Π΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ построСн git, Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ смотритС здСсь. Для добавлСния Ρ„Π°ΠΉΠ»Π° README.md Π² stage Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ git add.

> git add README.md

Если ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΎ Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ„Π°ΠΉΠ»Π°Ρ…, ΠΈ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΡ… всС ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π² stage, Ρ‚ΠΎ вмСсто ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π° ΠΏΠΎΡΡ‚Π°Π²ΡŒΡ‚Π΅ Ρ‚ΠΎΡ‡ΠΊΡƒ.

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ git status для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ сСйчас происходит Π² нашСм ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅.

> git status
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   README.md

Как Π²ΠΈΠ΄Π½ΠΎ, Π² stage Π±Ρ‹Π» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΎΠ΄ΠΈΠ½ Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ README.md ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ прСдставлСнный Π½Π°Π±ΠΎΡ€ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π³ΠΎΡ‚ΠΎΠ² ΠΊ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ΅ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ – Ρ‚.Π΅. ΠΊ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρƒ. Π‘Π΄Π΅Π»Π°Π΅ΠΌ это.

> git commit -m "[create repository]"
[master (root-commit) 500067c] [create repository]
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 README.md

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ статус ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°.

> git status
On branch master
nothing to commit, working tree clean

Как Π²ΠΈΠ΄Π½ΠΎ с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° послСднСго ΠΊΠΎΠΌΠΌΠΈΡ‚Π° Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ взглянСм Π½Π° список ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ².

> git log
commit 500067cc0b80643d38e2a24e9e0699031ada6be3
Author: Writer <[email protected]>
Date:   Mon Feb 12 22:51:14 2018 +0500

    [create repository]

Из ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π» ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠΌΠΌΠΈΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ ID: 500067cc0b80643d38e2a24e9e0699031ada6be3, Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎΠ± ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°Ρ… Π±ΡƒΠ΄Π΅Ρ‚ рассказано Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΡƒΡ€ΠΎΠΊΠ°Ρ…. Автор Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° Writer, ΠΎΠ½ (ΠΊΠΎΠΌΠΌΠΈΡ‚) Π±Ρ‹Π» создан Mon Feb 12 22:51:14 2018 +0500, с сообщСниСм: Β [create repository]. Π­Ρ‚ΠΎ довольно подробная информация, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² станСт ΠΌΠ½ΠΎΠ³ΠΎ, Ρ‚Π°ΠΊΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π²Ρ‹Π²ΠΎΠ΄Π° Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ, сокращСнный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ выглядит Ρ‚Π°ΠΊ.

> git log --oneline
500067c [create repository]

ПодвСдСм нСбольшоС Ρ€Π΅Π·ΡŽΠΌΠ΅ Π²Ρ‹ΡˆΠ΅ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ пустого рСпозитория.

> git init

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ² Π² stage.

> git add filename

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°.

> git commit -m β€œmessage”

ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ статуса ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°.

> git status

ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ.

> git log

ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ с сокращСнным Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

> git log --oneline

ΠžΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ курс ΠΏΠΎ gitΒ  Π΄Π΅Π»Π°ΡŽΡ‚ рСбята ΠΈΠ· GeekBrains, Π½Π°ΠΉΠ΄ΠΈΡ‚Π΅ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ β€œΠšΡƒΡ€ΡΡ‹β€ курс β€œGit. Быстрый старт”, он бСсплатный!

<<< Π§Π°ΡΡ‚ΡŒ 4. АрхитСктура GitΒ  Β Π§Π°ΡΡ‚ΡŒ 6. ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΏΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°ΠΌ >>>

Как ΡΠΊΠ»Π΅ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΠΈΒ Π·Π°Ρ‡Π΅ΠΌ это Π½ΡƒΠΆΠ½ΠΎ β€” Π‘Π»ΠΎΠ³ HTML Academy

Когда Π²Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚Π΅ пулрСквСст, ΠΈ ваш ΠΊΠΎΠ΄ смотрят ΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅, Π±Ρ‹Π²Π°Π΅Ρ‚ Π½ΡƒΠΆΠ½ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ измСнСния ΠΌΡ‹ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ сообщСниСм Π²Ρ€ΠΎΠ΄Π΅ Β«Π£Π²Π΅Π»ΠΈΡ‡ΠΈΠ» ΡˆΡ€ΠΈΡ„Ρ‚ Π½Π° 2pxΒ» ΠΈΠ»ΠΈ «ПомСнял ΠΎΡ‚Ρ‚Π΅Π½ΠΎΠΊ Ρ„ΠΎΠ½Π° Π² шапкС». Π’Π°ΠΊΠΈΠ΅ малСнькиС измСнСния интСрСсны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠΊΠ° ΠΎΠ½ΠΈ Π² пулрСквСстС. Π Π΅Π²ΡŒΡŽΠ²Π΅Ρ€ (Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ смотрит ваш ΠΊΠΎΠ΄), ΠΌΠΎΠΆΠ΅Ρ‚ Π»Π΅Π³ΠΊΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈ ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ, Π° Π½Π΅ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ вСсь diff Π·Π°Π½ΠΎΠ²ΠΎ, Π° Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π»Π΅Π³ΠΊΠΎ ΠΎΡ‚ΠΊΠ°Ρ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚, Ссли ΠΎΠ½ Π½Π΅ Π½ΡƒΠΆΠ΅Π½. Но ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ врСмя Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ пулрСквСст, эти малСнькиС ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Ρ‚Π΅Ρ€ΡΡŽΡ‚ свою Ρ†Π΅Π½Π½ΠΎΡΡ‚ΡŒ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡ… ΡΠΊΠ»Π΅ΠΈΡ‚ΡŒ Π² ΠΎΠ΄ΠΈΠ½. Как β€” я расскаТу Π²Π°ΠΌ сСгодня.

Как ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒΡΡ

Для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΈΠ· этой ΡΡ‚Π°Ρ‚ΡŒΠΈ Π³ΠΈΡ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ тСкстовый Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€. Π’ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… систСмах ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ это Vim. НС самый Π΄Ρ€ΡƒΠΆΠ΅Π»ΡŽΠ±Π½Ρ‹ΠΉ для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ². Π§Ρ‚ΠΎΠ±Ρ‹ Π²Π°ΠΌ Π±Ρ‹Π»ΠΎ ΠΊΠΎΠΌΡ„ΠΎΡ€Ρ‚Π½ΠΎ, установитС Π² качСствС Π³ΠΈΡ‚-Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° ваш Π»ΡŽΠ±ΠΈΠΌΡ‹ΠΉ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€. Π­Ρ‚ΠΎ дСлаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

git config --global core.editor 

НапримСр, Ссли Ρƒ вас Mac OS, ΠΈ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Atom Π² качСствС Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π²Π²Π΅Π΄ΠΈΡ‚Π΅:

git config --global core.editor "atom --wait"

А Ссли Ρƒ вас Windows, ΠΈ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Notepad++ Π² качСствС Π³ΠΈΡ‚-Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°, ваша ΠΊΠΎΠΌΠ°Π½Π΄Π° Π±ΡƒΠ΄Π΅Ρ‚ такая:

git config --global core.editor "'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"

Π’Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ просто ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ для запуска вашСго Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° ΠΈ ΠΏΠΎΠ΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΅Ρ‘. Π’ΠΎΡ‚ список ΠΊΠΎΠΌΠ°Π½Π΄ для популярных Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ².

Как ΡΠΊΠ»Π΅ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹

Π‘Π½Π°Ρ‡Π°Π»Π° ΡƒΠ·Π½Π°Π΅ΠΌ, сколько ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π½ΡƒΠΆΠ½ΠΎ ΡΠΊΠ»Π΅ΠΈΡ‚ΡŒ. Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚, ΠΊΠ°ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Ρƒ вас ΠΏΡ€ΠΈΠ±Π°Π²ΠΈΠ»ΠΈΡΡŒ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Π²Π΅Ρ‚ΠΊΠΎΠΉ master:

git cherry -v master

А эта β€” сколько ΠΈΡ…:

git cherry -v master | wc -l

git cherry -v master

ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ, Ρƒ мСня 5 ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ². Π’Π΅ΠΏΠ΅Ρ€ΡŒ я Ρ…ΠΎΡ‡Ρƒ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° HEAD~5, Ρ‚.Π΅. с Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ 5 ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π½Π°Π·Π°Π΄. Для этого я дСлаю Ρ‚Π°ΠΊ:

git rebase -i HEAD~5

Ρ„Π»Π°Π³ -i β€” Π·Π½Π°Ρ‡ΠΈΡ‚ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅. Π£ мСня открываСтся Ρ‚Π°ΠΊΠΎΠΉ Ρ„Π°ΠΉΠ»:

git rebase -i HEAD~5

Π’ΡƒΡ‚ список ΠΌΠΎΠΈΡ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² ΠΈ большой ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ я ΠΌΠΎΠ³Ρƒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ. Из списка ΠΊΠΎΠΌΠΌΠ°Π½Π΄ Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ squash ΠΈΠ»ΠΈ fixup для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΠ»Π΅ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ пригодится Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚-мСссСдТ, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ β€” ΠΊΠΎΠ³Π΄Π° Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚-мСссСдТ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ. Π˜Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΠ»Π΅ΠΈΡ‚ΡŒ всС ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, я дСлаю Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:

Бквош ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ²

Π’ΠΎ Π΅ΡΡ‚ΡŒ я Π³ΠΎΠ²ΠΎΡ€ΡŽ Π³ΠΈΡ‚Ρƒ Β«ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚, Π° ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΈΠΊΠ»Π΅ΠΉ ΠΊ Π½Π΅ΠΌΡƒΒ». ΠŸΠΎΡ‚ΠΎΠΌ я ΡΠΎΡ…Ρ€Π°Π½ΡΡŽ Ρ„Π°ΠΉΠ» ΠΈ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽ Π΅Π³ΠΎ. Π“ΠΈΡ‚ склСиваСт ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΠΈ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΠΌΠ½Π΅ ввСсти ΠΊΠΎΠΌΠΌΠΈΡ‚-мСссСдТ (ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠΎΠΌΠΌΠΈΡ‚-мСссСдТи всСх склССнных ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ²):

ΠšΠΎΠΌΠΌΠΈΡ‚-мСссСдТи склССнных ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ²

Π― Ρ…ΠΎΡ‡Ρƒ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послСдний:

ΠšΠΎΠΌΠΌΠΈΡ‚-мСссСдТ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°

Π‘ΠΎΡ…Ρ€Π°Π½ΡΡŽ Ρ„Π°ΠΉΠ» ΠΈ ΡΠΌΠΎΡ‚Ρ€ΡŽ Π»ΠΎΠ³:

git log

Π£Ρ€Π°, остался ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠΌΠΌΠΈΡ‚ с Π½ΡƒΠΆΠ½Ρ‹ΠΌ сообщСниСм.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½ΡƒΠΆΠ½ΠΎ Π²Π°ΡˆΡƒ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π½Π° ваш Π³ΠΈΡ‚-сСрвСр. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π²Ρ‹ Π΄Π΅Π»Π°Π΅Ρ‚Π΅ это с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ git push, Π½ΠΎ сСйчас Π²Π°ΠΌ это Π½Π΅ удастся:

git push

Π­Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ваша локальная Π²Π΅Ρ‚ΠΊΠ° ΠΈ Π²Π΅Ρ‚ΠΊΠ° Π½Π° сСрвСрС ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ. ΠŸΡ€ΠΈΡ‡Ρ‘ΠΌ Π½Π΅ просто Π² локальной Π²Π΅Ρ‚ΠΊΠ΅ Π΅ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅Ρ‚ Π½Π° сСрвСрС, Π½ΠΎ ΠΈ старых ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π½Π΅Ρ‚. Π’Π΅Π΄ΡŒ Ρƒ вас Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ΄ΠΈΠ½ Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ вмСсто всСх ΠΏΡ€Π΅ΠΆΠ½ΠΈΡ…. Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡˆΠΈΡ‚ΡŒ Π½Π° сСрвСр всС ваши измСнСния, нСсмотря Π½Π° ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚, запуститС ΠΏΡƒΡˆ с Ρ„Π»Π°Π³ΠΎΠΌ --force:

git push --force

git push --force

Π’Π΅ΠΏΠ΅Ρ€ΡŒ всё ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ! Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ форс Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹ Π² своих дСйствиях!

Как Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π±Π΅ΠΉΠ·

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ всё-Ρ‚Π°ΠΊΠΈ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚-мСссСдТ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ измСнСния, Ρ‚ΠΈΠΏΠ° «БвСрстал Ρ‚ΠΎ-Ρ‚ΠΎΒ», ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ β€” просто ΠΏΡ€Π°Π²ΠΊΠΈ ΠΊ Π½Π΅ΠΌΡƒ. Число ΠΏΡ€Π°Π²ΠΎΠΊ ΠΈΠ½ΠΎΠ³Π΄Π° Π΄ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Π΄ΠΎ 15, Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΡΠΈΠ΄Π΅Ρ‚ΡŒ ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π²Π΅Π·Π΄Π΅ squash. МоТно ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ автоматичСски ΠΏΡ€ΠΈΡΠΊΠ²ΠΎΡˆΠΈΠ²Π°Π»ΠΈΡΡŒ ΠΊ Π½ΡƒΠΆΠ½ΠΎΠΌΡƒ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для этого Π½ΡƒΠΆΠ½ΠΎ ΠΈΡ… ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΈΡ‚ΡŒ. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π²Ρ‹ помСняли Ρ„Π°ΠΉΠ» ΠΈ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π·Π°ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΈΡ‚ΡŒ измСнСния ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΊΡƒ ΠΏΠΎ Ρ€Π΅Π²ΡŒΡŽ:

git status

Π‘Π½Π°Ρ‡Π°Π»Π° Π½Π°Π΄ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ Ρ…Π΅Ρˆ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ этот ΠΊΠΎΠΌΠΌΠΈΡ‚ являСтся ΠΏΡ€Π°Π²ΠΊΠΎΠΉ. Π’ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ ΡƒΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹ΠΌ cherry:

git cherry -v master

Ага, Π²ΠΎΡ‚ ΠΎΠ½ наш Ρ…Π΅Ρˆ. А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡ΠΈΠΌ ΠΏΡ€Π°Π²ΠΊΠΎΠΉ ΠΊ этому:

git commit --fixup <Ρ…Π΅Ρˆ Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°>

ΠΠ΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π² точности ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ вСсь Ρ…Π΅Ρˆ, достаточно ΠΏΠ΅Ρ€Π²Ρ‹Ρ… 7 символов. Π― ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π²Ρ‹Π΄Π΅Π»ΡΡŽ ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° ΠΈ сколько выдСлится ΠΈ ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽ:

git commit --fixup

ИзмСнСния Π·Π°ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΈΠ»ΠΈΡΡŒ с сообщСниСм fixup! Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°. Наша история Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ выглядит Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:

git log

Π”ΠΎΠ±Π°Π²ΠΈΠΌ Π΅Ρ‰Ρ‘ нСсколько ΠΏΡ€Π°Π²ΠΎΠΊ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ измСнСния:

git cherry -v master

ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ. А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ склСим всС эти ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹. Волько Π½Π΅ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. Π“ΠΈΡ‚ сдСлаСт это Π·Π° нас:

git rebase -i --autosquash HEAD~4

И Π³ΠΈΡ‚ сам подставит слово fixup Ρ‚Π°ΠΌ, Π³Π΄Π΅ Π½ΡƒΠΆΠ½ΠΎ:

git rebase -i --autosquash

ΠŸΡ€ΠΎΡΡ‚ΠΎ сохраняСм, ΠΈ Π³ΠΈΡ‚ склСиваСт ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΊΠΎΠΌΠΌΠΈΡ‚-мСссСдТ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ:

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π°Π²Ρ‚ΠΎΡΠΊΠ²ΠΎΡˆΠ°

Π£Ρ€Π°, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΡƒΠΌΠ΅Π΅Ρ‚Π΅ ΡΠΊΠ»Π΅ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹!

Как ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π² Git

Для объСдинСния ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π²Β ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git reset, Π»ΠΈΠ±ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git rebase. Рассмотрим ΠΎΠ±Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°.

ОбъСдинСниС ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² (с использованиСм git rebase)

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π΄Π²Π° ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ послСдних ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π²Β ΠΎΠ΄ΠΈΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° git rebase ΡΒ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ -i (ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ).

Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° объСдиним послСдниС 2Β ΠΊΠΎΠΌΠΌΠΈΡ‚Π° Π²Β ΠΎΠ΄ΠΈΠ½. ВыполняСм ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

git rebase -i HEAD~2

ΠžΡ‚ΠΊΡ€ΠΎΠ΅Ρ‚ΡΡ тСкстовый Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, Π²Β ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π΅ строки ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ послСдним Π΄Π²ΡƒΠΌ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°ΠΌ:

pick ab37583 Added feature 1.
pick 3ab2b83 Added feature 2.

# Rebase e46d230..3ab2b83 onto e46d230 (2 commands)
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
...

Π’Β Π½Π°Ρ‡Π°Π»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки стоит слово pick. Π’Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ слово pick Π½Π°Β squash ΠΈΠ»ΠΈ просто Π½Π°Β Π±ΡƒΠΊΠ²Ρƒ sΒ ΡƒΒ Π²Ρ‚ΠΎΡ€ΠΎΠΉ строки. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ Π±ΡƒΠ΄Π΅Ρ‚ объСдинСн с прСдыдущим ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠΌ. Π˜Ρ‚Π°ΠΊ, Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ pick Π½Π°Β s, у вас Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅:

pick ab37583 Added feature 1.
s 3ab2b83 Added feature 2.
...

Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚Π΅ измСнСния ΠΈΒ Π·Π°ΠΊΡ€ΠΎΠΉΡ‚Π΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€.

Π‘Π½ΠΎΠ²Π° откроСтся Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, Π²Β ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Π°ΠΌ прСдлагаСтся ввСсти сообщСниС ΠΊΒ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ и являСтся объСдинСниСм Π΄Π²ΡƒΡ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ²:

# This is a combination of 2 commits.
# This is the 1st commit message:

Added feature 1.

# This is the commit message #2:

Added feature 2.

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.

ΠžΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ сообщСниС ΠΊΒ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρƒ, сохранитС измСнСния, ΠΈΒ Π·Π°ΠΊΡ€ΠΎΠΉΡ‚Π΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€.

Π’Β Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π²Ρ‹Β ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» объСдинСн ΠΈΠ·Β Π΄Π²ΡƒΡ… послСдних ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ².


Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π½Π΅Β 2, Π°Β Ρ‚Ρ€ΠΈ ΠΈΠ»ΠΈ большС ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², то в исходной ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ количСство. НапримСр, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ 5Β ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

git rebase -i HEAD~5

Π’Β Ρ‚Π°ΠΊΠΎΠΌ случаС pick Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π°Β squash (s) ΡƒΠΆΠ΅ ΡƒΒ 4Β ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ².

pick ab37583 Added feature 1.
s 3ab2b83 Added feature 2.
s bf43de1 Added feature 3.
s 10bccc1 Added feature 4.

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ нСсколько ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅Β ΡΠ²Π»ΡΡŽΡ‚ΡΡ послСдними, Ρ‚ΠΎΒ Π²Β ΠΊΠΎΠΌΠ°Π½Π΄Π΅ git rebase -i HEAD~n вмСсто HEAD Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ…Π΅Ρˆ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° (SHA1), а послС символа Ρ‚ΠΈΠ»ΡŒΠ΄Π° количСство ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹Β Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ. Π’Β Π΄Π°Π½Π½ΠΎΠΌ случаС Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎΒ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°Ρ…, сдСланных Ρ€Π°Π½ΡŒΡˆΠ΅, Ρ‡Π΅ΠΌ ΠΊΠΎΠΌΠΌΠΈΡ‚, Ρ…Π΅Ρˆ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²Ρ‹Β ΡƒΠΊΠ°Π·Π°Π»ΠΈ Π²Β ΠΊΠΎΠΌΠ°Π½Π΄Π΅. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

git rebase -i ae88544~3

На самом Π΄Π΅Π»Π΅ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ в тСкстовом Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ откроСтся список ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², начиная с HEAD, Ρ‚ΠΎΒ Π΅ΡΡ‚ΡŒ ΠΈΡ…Β Ρ‚Π°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ большС Ρ‚Ρ€Π΅Ρ… (Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ в нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρ…Π΅Ρˆ ae88544Β Π½Π΅ совпадаСт с HEAD).

ОбъСдинСниС ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² (с использованиСм git reset)

Для объСдинСния Π΄Π²ΡƒΡ… ΠΈΒ Π±ΠΎΠ»Π΅Π΅ послСдних ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² с использованиСм git reset Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

git reset --soft HEAD~n
git commit --amend

ВмСсто nΒ β€” Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ количСство ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹Β Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ.
ПослС выполнСния Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π²Ρ‹Β Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ввСсти сообщСниС (ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ) для Π½ΠΎΠ²ΠΎΠ³ΠΎ объСдинСнного ΠΊΠΎΠΌΠΌΠΈΡ‚Π°.

Как Π²Ρ‹Β ΠΌΠΎΠ³Π»ΠΈ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, в этом способС Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ввСсти сообщСниС ΠΊΠΎΠΌΠΌΠΈΡ‚Π° ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ. Но моТно ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ для рСдактирования Π²Π°ΠΌ открывался ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ склССн из сообщСний ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅ΠΌΡ‹Ρ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ². Для этого вмСсто Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ вводится Π±ΠΎΠ»Π΅Π΅ хитрая ΠΊΠΎΠΌΠ°Π½Π΄Π°. НапримСр, объСдиним Ρ‚Ρ€ΠΈ послСдних ΠΊΠΎΠΌΠΌΠΈΡ‚Π°:

git reset --soft HEAD~3 &&
git commit --edit -m"$(git log --format=%B --reverse HEAD..HEAD@{1})"

Как ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ сообщСниС ΠΊΠΎΠΌΠΌΠΈΡ‚Π° Π² Git

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Git Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒΡΡ с ситуациСй, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сообщСниС ΠΊΠΎΠΌΠΌΠΈΡ‚Π°. БущСствуСт ряд ΠΏΡ€ΠΈΡ‡ΠΈΠ½, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ внСсти измСнСния, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, исправлСниС ΠΎΠΏΠ΅Ρ‡Π°Ρ‚ΠΊΠΈ, ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ΄Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ, ΠΊΠ°ΠΊ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ сообщСниС ΠΎ самых послСдних ΠΈΠ»ΠΈ старых ΠΊΠΎΠΌΠΌΠΈΡ‚Π°Ρ… Π² Git.

Β 

Команда git commit –amend позволяСт Π²Π°ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ самоС послСднСС сообщСниС ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅.

Β 

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ сообщСниС самого послСднСго ΠΊΠΎΠΌΠΌΠΈΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ Π±Ρ‹Π» ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ Π² ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, ΠΏΠ΅Ρ€Π΅Π΄Π°ΠΉΡ‚Π΅ Π΅Π³ΠΎ снова, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„Π»Π°Π³ –amend.

  1. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅Β Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π² вашСм Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅.
  2. Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ (ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ) сообщСниС ΠΎ послСднСм ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅:
    git commit --amend -m "New commit message."

    Команда выполняСт ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡŒ самого послСднСго ΠΊΠΎΠΌΠΌΠΈΡ‚Π° Π½ΠΎΠ²Ρ‹ΠΌ.

    ΠžΠΏΡ†ΠΈΡ -m позволяСт Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ сообщСниС Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС Π±Π΅Π· открытия Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° сСссии.

Β 

ΠŸΠ΅Ρ€Π΅Π΄ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ сообщСния ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅ Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ€Π°Π½Π΅Π΅ Π·Π°Π±Ρ‹Ρ‚Ρ‹Π΅ измСнСния:

git add .git commit --amend -m "New commit message."

Β 

Π˜Π·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ – это Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с Π΄Ρ€ΡƒΠ³ΠΈΠΌ SHA-1. ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ большС Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠ΅.

Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π²Π°ΠΌ слСдуСт ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ внСсСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΠΊΠΎΠΌΠΌΠΈΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΆΠ΅ Π²Ρ‹Π΄Π²ΠΈΠ½ΡƒΡ‚, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Ρƒ людСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡŽΡ‚ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ Π½Π° этом ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅.Β Π₯ΠΎΡ€ΠΎΡˆΠ΅ΠΉ ΠΈΠ΄Π΅Π΅ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΊΠΎΠ½ΡΡƒΠ»ΡŒΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ со своими ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌΠΈ-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°.

Если Π²Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ сообщСниС ΠΎ самом послСднСм Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅, Π²Π°ΠΌ придСтся ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π°ΠΆΠ°Ρ‚ΡŒ Π΅Π³ΠΎ.

  1. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅.
  2. Π˜ΡΠΏΡ€Π°Π²ΡŒΡ‚Π΅ сообщСниС ΠΎ послСднСм Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅:
    git commit --amend -m "New commit message."

    Β 

  3. ΠŸΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π°ΠΆΠΌΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°:
    git push --force branch-name

    Β 

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ сообщСниС ΠΎ старых ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠΎΠΌΠΌΠΈΡ‚Π°Ρ…, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Β git rebase для измСнСния ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… старых ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ².

Команда rebase пСрСписываСт ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², ΠΈ Π½Π°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ рСкомСндуСтся ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΆΠ΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Ρ‹ Π²Β ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ GitΒ .

  1. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, содСрТащСС сообщСниС фиксации, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ.
  2. Π’Π²Π΅Π΄ΠΈΡ‚Π΅Β git rebase -i HEAD~N, Π³Π΄Π΅Β N число ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² для выполнСния пСрСбазирования. НапримСр, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ 4-ΠΉ ΠΈ 5-ΠΉ послСдниС ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, Π²Π²Π΅Π΄ΠΈΡ‚Π΅:
    git rebase -i HEAD~5

    Команда ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ послСдниС X ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π² тСкстовом Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽΒ :

    pick 43f8707f9 fix: update dependency json5 to ^2.1.1
    pick cea1fb88a fix: update dependency verdaccio to ^4.3.3
    pick aa540c364 fix: update dependency webpack-dev-server to ^3.8.2
    pick c5e078656 chore: update dependency flow-bin to ^0.109.0
    pick 11ce0ab34 fix: Fix spelling.
    
    # Rebase 7e59e8ead..11ce0ab34 onto 7e59e8ead (5 commands)

    Β 

  3. ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΊ Π»ΠΈΠ½ΠΈΠΈ сообщСния фиксации, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ, ΠΈ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ pick Π½Π° reword:
    reword 43f8707f9 fix: update dependency json5 to ^2.1.1
    reword cea1fb88a fix: update dependency verdaccio to ^4.3.3
    pick aa540c364 fix: update dependency webpack-dev-server to ^3.8.2
    pick c5e078656 chore: update dependency flow-bin to ^0.109.0
    pick 11ce0ab34 fix: Fix spelling.
    
    # Rebase 7e59e8ead..11ce0ab34 onto 7e59e8ead (5 commands)

    Β 

  4. Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚Π΅ измСнСния ΠΈ Π·Π°ΠΊΡ€ΠΎΠΉΡ‚Π΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€.
  5. Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° открываСтся Π½ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ тСкстового Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°.Β Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ сообщСниС ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅, сохранитС Ρ„Π°ΠΉΠ» ΠΈ Π·Π°ΠΊΡ€ΠΎΠΉΡ‚Π΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€.
    fix: update dependency json5 to ^2.1.1

    Β 

  6. ΠŸΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ измСнСния Π² ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ:
    git push --force branch-name

    Β 

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ самоС послСднСС сообщСниС ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git commit –amendΒ ΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ староС ΠΈΠ»ΠΈ нСсколько сообщСний ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅Β git rebase -i HEAD~N.

НС вноситС измСнСния Π² ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ это ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ массу ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Ρƒ Π²Π°ΡˆΠΈΡ… ΠΊΠΎΠ»Π»Π΅Π³.

Если Π²Ρ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ ΠΈΠ»ΠΈ Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΎΡ‚Π·Ρ‹Π², ΠΎΡΡ‚Π°Π²ΡŒΡ‚Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ Π½ΠΈΠΆΠ΅.

Если Π²Ρ‹ нашли ΠΎΡˆΠΈΠ±ΠΊΡƒ, поТалуйста, Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚Π΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ тСкста ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Ctrl+Enter.

Git Commit | Π£Ρ‡Π΅Π±Π½ΠΈΠΊ Atlassian Git

Команда git commit Π΄Π΅Π»Π°Π΅Ρ‚ снимок Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. ЗафиксированныС снимки ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ «бСзопасныС» вСрсии ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° — Git Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ ΠΈΡ…, Ссли Π²Ρ‹ явно Π½Π΅ попроситС ΠΎΠ± этом. ΠŸΠ΅Ρ€Π΅Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ git commit ΠΊΠΎΠΌΠ°Π½Π΄Π° git add ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для продвиТСния ΠΈΠ»ΠΈ «стадии» ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ сохранСны Π² фиксации. Π­Ρ‚ΠΈ Π΄Π²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git commit ΠΈ git add — Π΄Π²Π΅ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ….

Git commit vs SVN commit

Π₯отя Ρƒ Π½ΠΈΡ… ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ имя, git commit Π½Π΅ Ρ‡Ρ‚ΠΎ ΠΈΠ½ΠΎΠ΅, ΠΊΠ°ΠΊ svn commit . Π­Ρ‚ΠΎΡ‚ ΠΎΠ±Ρ‰ΠΈΠΉ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ввСсти Π² Π·Π°Π±Π»ΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ² Π² Git, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ… ΠΎΠΏΡ‹Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с svn, ΠΈ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠ½ΡƒΡ‚ΡŒ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ git commit ΠΈ svn commit , Π½ΡƒΠΆΠ½ΠΎ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡƒΡŽ модСль прилоТСния (svn) с модСлью распрСдСлСнного прилоТСния (Git). Π’ SVN фиксация ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ измСнСния с локального ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° SVN Π² ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΎΠ±Ρ‰ΠΈΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ SVN.Π’ Git Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ распрСдСлСны, ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ снимки Ρ„ΠΈΠΊΡΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² локальном Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ, ΠΈ это Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ взаимодСйствия с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ рСпозиториями Git. ПозднСС ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Git ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Ρ‹ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Π΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ.

Как это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

На высоком ΡƒΡ€ΠΎΠ²Π½Π΅ Git ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ управлСния Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ шкалой. ΠšΠΎΠΌΠΌΠΈΡ‚Ρ‹ — это основныС стандартныС Π±Π»ΠΎΠΊΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡˆΠΊΠ°Π»Ρ‹ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Git. ΠšΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ снимки ΠΈΠ»ΠΈ Π²Π΅Ρ…ΠΈ Π½Π° Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ шкалС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Git.ΠšΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git commit , Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ состояниС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π² этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π‘Π½ΠΈΠΌΠΊΠΈ Git всСгда ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π² локальном Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎ отличаСтся ΠΎΡ‚ SVN, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ рабочая копия фиксируСтся Π² Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ. Напротив, Git Π½Π΅ заставляСт вас Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅ΠΌ, ΠΏΠΎΠΊΠ° Π²Ρ‹ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹. Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ промСТуточная ΠΎΠ±Π»Π°ΡΡ‚ΡŒ являСтся Π±ΡƒΡ„Π΅Ρ€ΠΎΠΌ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠΌ ΠΈ историСй ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° являСтся Π±ΡƒΡ„Π΅Ρ€ΠΎΠΌ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΈΡ… Π²ΠΊΠ»Π°Π΄Π°ΠΌΠΈ ΠΈ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅ΠΌ.

Π­Ρ‚ΠΎ мСняСт Π±Π°Π·ΠΎΠ²ΡƒΡŽ модСль Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Git. ВмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Π½ΠΎΡΠΈΡ‚ΡŒ измСнСния ΠΈ Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… нСпосрСдствСнно Π² Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠΌ Ρ€Π΅ΠΏΠΎ, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Git ΠΈΠΌΠ΅ΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π½Π°ΠΊΠ°ΠΏΠ»ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π² своСм локальном Ρ€Π΅ΠΏΠΎ. Π­Ρ‚ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ прСимущСств ΠΏΠ΅Ρ€Π΅Π΄ совмСстной Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ Π² стилС SVN: это ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, позволяСт Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ связанныС ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΠΈ ΠΎΡ‡ΠΈΡ‰Π°Ρ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠ΅ΠΉ Π² Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ позволяСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ срСдС, откладывая ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΎΠ½ΠΈ Π½Π΅ достигнут ΡƒΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° для слияния с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ.Π₯отя изоляция ΠΈ отлоТСнная интСграция Π²Ρ‹Π³ΠΎΠ΄Π½Ρ‹ ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π² интСрСсах ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‡Π°ΡΡ‚ΡƒΡŽ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ нСбольшими подраздСлСниями. Для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Π»ΡƒΡ‡ΡˆΠΈΡ… ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°Ρ… совмСстной Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Git ΠΏΡ€ΠΎΡ‡Ρ‚ΠΈΡ‚Π΅, ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΡ€ΡƒΡŽΡ‚ свой Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ процСсс Git.

Π‘Π½ΠΈΠΌΠΊΠΈ, Π° Π½Π΅ отличия

Помимо практичСских Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ SVN ΠΈ Git, ΠΈΡ… основная рСализация Ρ‚Π°ΠΊΠΆΠ΅ слСдуСт ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΠΌΡΡ философиям проСктирования. Π’ Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ SVN отслСТиваСт различия Π² Ρ„Π°ΠΉΠ»Π΅, модСль управлСния вСрсиями Git основана Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… снимках.НапримСр, фиксация SVN состоит ΠΈΠ· сравнСния с исходным Ρ„Π°ΠΉΠ»ΠΎΠΌ, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹ΠΌ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ. Git, с Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, записываСт всС содСрТимоС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ фиксации.

Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Git Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ быстрСС, Ρ‡Π΅ΠΌ SVN, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Ρ„Π°ΠΉΠ»Π° Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Β«ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒΒ» ΠΈΠ· Π΅Π³ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ — полная вСрсия ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° сразу ΠΆΠ΅ доступна ΠΈΠ· Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Git.

МодСль ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… снимков

Git ΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π΄Π°Π»Π΅ΠΊΠΎ ΠΈΠ΄ΡƒΡ‰Π΅Π΅ влияниС практичСски Π½Π° всС аспСкты ΠΌΠΎΠ΄Π΅Π»ΠΈ управлСния вСрсиями, затрагивая всС, ΠΎΡ‚ инструмСнтов вСтвлСния ΠΈ слияния Π΄ΠΎ Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… процСссов совмСстной Ρ€Π°Π±ΠΎΡ‚Ρ‹.

ΠžΠ±Ρ‰ΠΈΠ΅ ΠΎΠΏΡ†ΠΈΠΈ

  git commit  

ЗафиксируйтС поэтапный снимок. Π­Ρ‚ΠΎ запустит тСкстовый Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‰ΠΈΠΉ Π²Π°ΠΌ ввСсти сообщСниС ΠΎ фиксации. ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ Π²Π²Π΅Π»ΠΈ сообщСниС, сохранитС Ρ„Π°ΠΉΠ» ΠΈ Π·Π°ΠΊΡ€ΠΎΠΉΡ‚Π΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ.

  git commit -a  

ЗафиксируйтС снимок всСх ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅. Бюда входят Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ отслСТиваСмых Ρ„Π°ΠΉΠ»ΠΎΠ² (Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ git, Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ своСй истории).

  git commit -m "сообщСниС фиксации"  

Команда быстрого доступа, которая Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ создаСт Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ с ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΌ сообщСниСм фиксации. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ git commit ΠΎΡ‚ΠΊΡ€ΠΎΠ΅Ρ‚ локально настроСнный тСкстовый Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ ΠΈ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ ввСсти сообщСниС фиксации. ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΎΠΏΡ†ΠΈΠΈ -m ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ΠΎΡ‚ΠΊΠ°Π·Ρƒ ΠΎΡ‚ ΠΏΡ€ΠΈΠ³Π»Π°ΡˆΠ΅Π½ΠΈΡ тСкстового Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ встроСнного сообщСния.

  git commit -am "сообщСниС фиксации"  

Π‘ΠΎΡ‡Π΅Ρ‚Π°Π½ΠΈΠ΅ клавиш для ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰Π΅Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ -a ΠΈ -m .Π­Ρ‚Π° комбинация Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ создаСт Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ всСх поэтапных ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ встроСнноС сообщСниС фиксации.

  git commit --amend  

Π­Ρ‚Π° опция добавляСт Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ фиксации. ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° этой ΠΎΠΏΡ†ΠΈΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ послСднюю Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ. ВмСсто создания Π½ΠΎΠ²ΠΎΠΉ фиксации ΠΊ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ фиксации Π±ΡƒΠ΄ΡƒΡ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ поэтапныС измСнСния. Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΎΡ‚ΠΊΡ€ΠΎΠ΅Ρ‚ настроСнный тСкстовый Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ систСмы ΠΈ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π°Π½Π΅Π΅ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ сообщСниС фиксации.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ с фиксациСй

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ прСдполагаСтся, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ Π² Ρ„Π°ΠΉΠ»Π΅ с ΠΈΠΌΠ΅Π½Π΅ΠΌ hello.py Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠ΅ ΠΈ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ Π·Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² истории ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π‘Π½Π°Ρ‡Π°Π»Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ git add , Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ поэтапный снимок.

  git Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ hello.py  

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ hello.py Π² ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ Git. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ этого дСйствия с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git status .

  git status На Π³Π»Π°Π²Π½ΠΎΠΌ сСрвСрС Π²Π΅Ρ‚ΠΊΠΈ ИзмСнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ: (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Β«git reset HEAD ...Β» для ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ) Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ»: hello.py  

Π—Π΅Π»Π΅Π½Ρ‹ΠΉ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ»: hello.py ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ hello.py Π±ΡƒΠ΄Π΅Ρ‚ сохранСн ΠΏΡ€ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ фиксации. Из ΠΊΠΎΠΌΠΌΠΈΡ‚Π° создаСтся Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅:

  git commit  

ΠžΡ‚ΠΊΡ€ΠΎΠ΅Ρ‚ΡΡ тСкстовый Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ (настраиваСмый с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ git config ), Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ сообщСниС ΠΆΡƒΡ€Π½Π°Π»Π° фиксации вмСстС со списком Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ зафиксировано:

  # ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, Π²Π²Π΅Π΄ΠΈΡ‚Π΅ сообщСниС фиксации для Π²Π°ΡˆΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.Π‘Ρ‚Ρ€ΠΎΠΊΠΈ, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ΡΡ с символа Β«#Β», Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹, Π° пустоС сообщСниС ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ. # На Π³Π»Π°Π²Π½ΠΎΠΌ сСрвСрС # ИзмСнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ: # (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ "git reset HEAD ..." для ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ постановки) # # ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ: hello.py  

Git Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ сообщСния ΠΎ фиксации соотвСтствовали ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ ограничСниям форматирования, Π½ΠΎ каноничСский Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΡƒΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всю Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкС ΠΌΠ΅Π½Π΅Π΅ Ρ‡Π΅ΠΌ ΠΈΠ· 50 символов, ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΡƒΡΡ‚ΡƒΡŽ строку, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ объяснСниС Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ. НапримСр:

  Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ сообщСниС, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΠΎΠ΅ ΠΏΡ€ΠΈ привСтствии.py 
- ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ sayHello () для Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ - Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ sayGoodbye () Π½Π° Π±ΠΎΠ»Π΅Π΅ Π΄Ρ€ΡƒΠΆΠ΅Π»ΡŽΠ±Π½ΠΎΠ΅ сообщСниС

Π­Ρ‚ΠΎ обычная ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° — ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²ΡƒΡŽ строку сообщСния фиксации Π² качСствС Ρ‚Π΅ΠΌΡ‹, ΠΊΠ°ΠΊ Π² элСктронном письмС. ΠžΡΡ‚Π°Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ сообщСния ΠΆΡƒΡ€Π½Π°Π»Π° считаСтся Ρ‚Π΅Π»ΠΎΠΌ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ Π½Π°Π±ΠΎΡ€Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ фиксации. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Ρ‚Π°ΠΊΠΆΠ΅ Π»ΡŽΠ±ΡΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ настоящСС врСмя Π² своих сообщСниях ΠΎ фиксации. Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΈΡ… Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΡ…ΠΎΠΆΠΈΠΌΠΈ Π½Π° дСйствия Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ пСрСзаписи истории Π±ΠΎΠ»Π΅Π΅ ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ понятными.

Как ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ (ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ) ΠΊΠΎΠΌΠΌΠΈΡ‚

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ hello.py Π²Ρ‹ΡˆΠ΅. Π”Π°Π²Π°ΠΉΡ‚Π΅ сдСлаСм дальнСйшиС обновлСния для hello.py ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

  git add hello.py git commit --amend  

Π­Ρ‚ΠΎ снова ΠΎΡ‚ΠΊΡ€ΠΎΠ΅Ρ‚ настроСнный тСкстовый Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€. Однако Π½Π° этот Ρ€Π°Π· ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ сообщСниСм фиксации, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ Π²Π²Π΅Π»ΠΈ Ρ€Π°Π½Π΅Π΅. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ создаСм Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚, Π° Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠ΅ΠΌ послСдний.

РСзюмС

Команда git commit — ΠΎΠ΄Π½Π° ΠΈΠ· основных основных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Git. Для Π²Ρ‹Π±ΠΎΡ€Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ внСсСны Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ использованиС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git add . Π—Π°Ρ‚Π΅ΠΌ git commit ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для создания ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ снимка поэтапных ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π½Π° Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ шкалС истории ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Git. Π£Π·Π½Π°ΠΉΡ‚Π΅ большС ΠΎΠ± использовании git add Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ страницС. ΠšΠΎΠΌΠ°Π½Π΄Ρƒ git status ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для исслСдования состояния ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠΉ области ΠΈ ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰Π΅ΠΉ фиксации.

МодСль фиксации SVN ΠΈ Git сущСствСнно различаСтся, Π½ΠΎ ΠΈΡ… часто ΠΏΡƒΡ‚Π°ΡŽΡ‚ ΠΈΠ·-Π·Π° ΠΎΠ±Ρ‰Π΅ΠΉ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ. Если Π²Ρ‹ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚Π΅ ΠΊ Git ΠΈΠ· Π»ΠΈΡ‡Π½ΠΎΠΉ истории использования SVN, ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² Git ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π΄Π΅ΡˆΠ΅Π²Ρ‹ ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ часто. Π’ Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ SVN — это дорогостоящая опСрация, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π°Ρ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ запрос, ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Git Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ локально ΠΈ с Π±ΠΎΠ»Π΅Π΅ эффСктивным Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ.

.

git commit — Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² локальном Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ

Команда «commit» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для сохранСния Π²Π°ΡˆΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² локальном Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ явно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Git , ΠΊΠ°ΠΊΠΈΠ΅ измСнСния Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ Π΄ΠΎ , запустив ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Β«git commitΒ». Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ» Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ автоматичСски Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π±Ρ‹Π» ΠΈΠ·ΠΌΠ΅Π½Π΅Π½. ВмСсто этого Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Β«git addΒ», Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ ΠΆΠ΅Π»Π°Π΅ΠΌΡ‹Π΅ измСнСния для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

Π’Π°ΠΊΠΆΠ΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π² Git (Π½Π΅ ΠΊΠ°ΠΊ Π² Subversion) фиксация — это , Π° Π½Π΅ , автоматичСски пСрСдаваСмая Π½Π° ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ сСрвСр. ИспользованиС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Β«git commitΒ» сохраняСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ фиксации Π² локальном Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ Git . ОбмСн ΠΊΠΎΠΌΠΌΠΈΡ‚Π°ΠΌΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΈ явно (с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄ Β«git fetchΒ», Β«git pullΒ» ΠΈ Β«git pushΒ»).

Π¨ΠΏΠ°Ρ€Π³Π°Π»ΠΊΠ° ΠΏΠΎ Git

НС Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Ρ‚ΡŒ всС эти ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹: ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π½Π°ΡˆΡƒ ΠΏΠΎΠΏΡƒΠ»ΡΡ€Π½ΡƒΡŽ Β«Π¨ΠΏΠ°Ρ€Π³Π°Π»ΠΊΡƒ ΠΏΠΎ GitΒ» — бСсплатно!

Π’Π°ΠΆΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹

-ΠΌ <сообщСниС>

УстанавливаСт сообщСниС фиксации. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄Π°ΠΉΡ‚Π΅ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ описаниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ вашим Ρ‚ΠΎΠ²Π°Ρ€ΠΈΡ‰Π°ΠΌ ΠΏΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ (ΠΈ Π²Π°ΠΌ самому) ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ.

-Π°

Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² эту Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ всС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹Π΅ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Ρ„Π°ΠΉΠ»Ρ‹. Однако ΠΈΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ нСотслСТиваСмыС (Π½ΠΎΠ²Ρ‹Π΅) Ρ„Π°ΠΉΠ»Ρ‹ Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ.

- ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ

ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡ‹Π²Π°Π΅Ρ‚ ΡΠ°ΠΌΡƒΡŽ послСднюю Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ с Π»ΡŽΠ±Ρ‹ΠΌΠΈ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌΠΈ измСнСниями ΠΈ / ΠΈΠ»ΠΈ Π½ΠΎΠ²Ρ‹ΠΌ сообщСниСм фиксации. Git ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡˆΠ΅Ρ‚ послСдний ΠΊΠΎΠΌΠΌΠΈΡ‚ ΠΈ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ Π΅Π³ΠΎ исправлСнным.ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ такая ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ‚Π΅Ρ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… , Π° Π½Π΅ , Π΅Ρ‰Π΅ Π±Ρ‹Π»ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Ρ‹ Π² ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ.

Π‘ΠΎΠ²Π΅Ρ‚
ΠŸΡ€ΠΎΡΡ‚Π°Ρ фиксация Π² башнС

Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Tower Git, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ ΠΎΡ‡Π΅Π½ΡŒ просто: просто ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ, ΠΈ Π²Π²Π΅Π΄ΠΈΡ‚Π΅ своС сообщСниС фиксации. Π’Ρ‹ Π΄Π°ΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈ строки ΠΈΠ· Ρ„Π°ΠΉΠ»Π° (вмСсто всСго Ρ„Π°ΠΉΠ»Π°)!

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования

Для Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ процСсса Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Β«git addΒ» для внСсСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ.ЀактичСская ΠΊΠΎΠΌΠ°Π½Π΄Π° фиксации Π·Π°Ρ‚Π΅ΠΌ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ упомянутыС измСнСния Π² Π½ΠΎΠ²ΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ фиксации:

  git Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ index.html css / styles.css
git commit -m "Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΈ ΡΡ‚ΠΈΠ»ΡŒ Π½Π° Π³Π»Π°Π²Π½ΠΎΠΉ страницС"
  

Если Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² Π² вашСй Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ ΠΊΠΎΠΏΠΈΠΈ — ΠΈ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ — Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Β«-aΒ» ΠΈ Ρ‚Π΅ΠΌ самым ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ шаг Β«git addΒ»:

  git commit -a -m Β«Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΈ ΡΡ‚ΠΈΠ»ΡŒ Π½Π° домашнСй страницС»
  

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Β«—amendΒ» пригодится, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли Π²Ρ‹ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π½Π°Π±Ρ€Π°Π»ΠΈ сообщСниС послСднСго ΠΊΠΎΠΌΠΌΠΈΡ‚Π° ΠΈΠ»ΠΈ Π·Π°Π±Ρ‹Π»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅.Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π±ΡƒΠ΄Π΅Ρ‚ исправлСн самый послСдний ΠΊΠΎΠΌΠΌΠΈΡ‚, пСрСзаписав Π΅Π³ΠΎ сообщСниС ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠ² Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅:

  git Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π·Π°Π±Ρ‹Ρ‚Ρ‹ΠΉ-change.js
git commit --amend -m "НовоС сообщСниС фиксации"
  

Π£Π·Π½Π°Ρ‚ΡŒ большС

.

git ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ | Π£Ρ‡Π΅Π±Π½ΠΈΠΊ Atlassian Git

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π’ этом руководствС Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ пСрСписывания ΠΈ измСнСния истории Git. Git ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ нСсколько Ρ€Π°Π·Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² для записи ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. ΠœΡ‹ обсудим ΡΠΈΠ»ΡŒΠ½Ρ‹Π΅ ΠΈ слабыС стороны Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ с Π½ΠΈΠΌΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. Π’ этом руководствС ΠΎΠ±ΡΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнных ΠΏΡ€ΠΈΡ‡ΠΈΠ½ пСрСзаписи зафиксированных ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… снимков ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ошибок.

Основная Π·Π°Π΄Π°Ρ‡Π°

Git — ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ потСряСтС зафиксированноС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅.Но ΠΎΠ½ Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π°Ρ‚ΡŒ Π²Π°ΠΌ ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ вашим Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌ процСссом Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π­Ρ‚ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΡ‡Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ выглядит история вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°; ΠΎΠ΄Π½Π°ΠΊΠΎ это Ρ‚Π°ΠΊΠΆΠ΅ создаСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΡ‚Π΅Ρ€ΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ². Git прСдоставляСт свои ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ пСрСзаписи истории ΠΏΠΎΠ΄ заявлСниСм ΠΎΠ± ΠΎΡ‚ΠΊΠ°Π·Π΅ ΠΎΡ‚ отвСтствСнности, Ρ‡Ρ‚ΠΎ ΠΈΡ… использованиС ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΏΠΎΡ‚Π΅Ρ€Π΅ содСрТимого.

Git ΠΈΠΌΠ΅Π΅Ρ‚ нСсколько ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² для хранСния истории ΠΈ сохранСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. Π­Ρ‚ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π² сСбя: Commit --amend , git rebase ΠΈ git reflog .Π­Ρ‚ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΌΠΎΡ‰Π½Ρ‹Π΅ возмоТности настройки Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ процСсса. К ΠΊΠΎΠ½Ρ†Ρƒ этого руководства Π²Ρ‹ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚Π΅ΡΡŒ с ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ позволят Π²Π°ΠΌ Ρ€Π΅ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ваши ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Git ΠΈ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ошибок, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ пСрСзаписи истории.

ИзмСнСниС послСднСй фиксации: git commit --amend

Команда git commit --amend — ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ способ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΡΠ°ΠΌΡƒΡŽ послСднюю Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ. Он позволяСт ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ поэтапныС измСнСния с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ фиксациСй вмСсто создания ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½ΠΎΠ²ΠΎΠΉ фиксации.Π•Π³ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для простого рСдактирования ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ сообщСния фиксации Π±Π΅Π· измСнСния Π΅Π³ΠΎ снимка. Но ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π½Π΅ просто измСняСт ΡΠ°ΠΌΡƒΡŽ послСднюю Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ, ΠΎΠ½ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ замСняСт Π΅Π΅, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ измСнСнная фиксация Π±ΡƒΠ΄Π΅Ρ‚ Π½ΠΎΠ²ΠΎΠΉ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒΡŽ со своим собствСнным ref. Для Git это Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΊΠ°ΠΊ Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π° схСмС Π½ΠΈΠΆΠ΅ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ Π·Π²Π΅Π·Π΄ΠΎΡ‡ΠΊΠΎΠΉ (*). Π•ΡΡ‚ΡŒ нСсколько распространСнных сцСнариСв использования git commit --amend . ΠœΡ‹ рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ….

Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ послСднСС сообщСниС ΠΊΠΎΠΌΠΌΠΈΡ‚Π° Git

  git commit --amend  

Допустим, Π²Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠΈΠ»ΠΈ Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ ΠΈ сдСлали ΠΎΡˆΠΈΠ±ΠΊΡƒ Π² сообщСнии ΠΆΡƒΡ€Π½Π°Π»Π° фиксации.Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ этой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΊΠΎΠ³Π΄Π° Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½ΠΎ, позволяСт Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сообщСниС ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ фиксации, Π½Π΅ измСняя Π΅Π΅ снимок.

ΠŸΡ€Π΅ΠΆΠ΄Π΅Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ происходят постоянно Π² Ρ…ΠΎΠ΄Π΅ вашСго повсСднСвного развития. Π›Π΅Π³ΠΊΠΎ Π·Π°Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΎΡ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сообщСниС фиксации. Π€Π»Π°Π³ --amend — ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ способ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ эти ΠΌΠ΅Π»ΠΊΠΈΠ΅ ошибки.

  git commit --amend -m "ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ΅ сообщСниС фиксации"  

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° -m позволяСт ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ сообщСниС ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки Π±Π΅Π· запроса Π½Π° ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°.

ИзмСнСниС зафиксированных Ρ„Π°ΠΉΠ»ΠΎΠ²

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ дСмонстрируСт ΠΎΠ±Ρ‰ΠΈΠΉ сцСнарий Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π° основС Git. Допустим, ΠΌΡ‹ ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ нСсколько Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π±Ρ‹ Π·Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΎΠ΄Π½ΠΎΠΌ снимкС, Π½ΠΎ ΠΏΠΎΡ‚ΠΎΠΌ Π·Π°Π±Ρ‹Π²Π°Π΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ€Π°Π·. Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ошибки — это просто вопрос постановки Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° ΠΈ фиксации с Ρ„Π»Π°Π³ΠΎΠΌ --amend :

  # ΠžΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ hello.py ΠΈ main.py git add hello.py git commit # ΠŸΠΎΠΉΠΌΠΈΡ‚Π΅, Π²Ρ‹ Π·Π°Π±Ρ‹Π»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ измСнСния ΠΈΠ· main.py git add main.py git commit --amend --no-edit  

Π€Π»Π°Π³ --no-edit ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ внСсти ΠΏΠΎΠΏΡ€Π°Π²ΠΊΡƒ Π² ваш ΠΊΠΎΠΌΠΌΠΈΡ‚, Π½Π΅ измСняя Π΅Π³ΠΎ сообщСниС ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ Π½Π΅ΠΏΠΎΠ»Π½Ρ‹ΠΉ, ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ ΠΌΡ‹ зафиксировали измСнСния Π² hello.py ΠΈ main.py Π² ΠΎΠ΄Π½ΠΎΠΌ снимкС.

НС ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹

Π˜Π·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π½Π° самом Π΄Π΅Π»Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π½ΠΎΠ²Ρ‹ΠΌΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°ΠΌΠΈ, ΠΈ прСдыдущая фиксация большС Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π² вашСй Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠ΅.Π­Ρ‚ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π΅ ΠΆΠ΅ послСдствия, Ρ‡Ρ‚ΠΎ ΠΈ сброс общСдоступного снимка. Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ измСнСния фиксации, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ основывали свою Ρ€Π°Π±ΠΎΡ‚Ρƒ. Π­Ρ‚ΠΎ запутанная ситуация для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ слоТно Π²Ρ‹ΠΉΡ‚ΠΈ.

РСзюмС

Напомним, git commit --amend позволяСт Π²Π°ΠΌ Π²Π·ΡΡ‚ΡŒ ΡΠ°ΠΌΡƒΡŽ послСднюю Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊ Π½Π΅ΠΉ Π½ΠΎΠ²Ρ‹Π΅ поэтапныС измСнСния. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ измСнСния ΠΈΠ· ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠΉ области Git, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΡ… с фиксациСй --amend . Если Π½Π΅Ρ‚ внСсСнных ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, --amend всС Ρ€Π°Π²Π½ΠΎ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ Π²Π°ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΆΡƒΡ€Π½Π°Π» сообщСний послСднСй фиксации.Π‘ΡƒΠ΄ΡŒΡ‚Π΅ остороТны ΠΏΡ€ΠΈ использовании --amend для ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Ρ‡Π»Π΅Π½Π°ΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. ВнСсСниС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ, ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π·Π°ΠΏΡƒΡ‚Π°Π½Π½ΠΎΠ³ΠΎ ΠΈ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² слияния.

ИзмСнСниС старых ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ²

Для измСнСния старых ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ git rebase , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π² Π½ΠΎΠ²ΡƒΡŽ Π±Π°Π·ΠΎΠ²ΡƒΡŽ Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ. Π’ стандартном Ρ€Π΅ΠΆΠΈΠΌΠ΅ git rebase позволяСт Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ — автоматичСски примСняя ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠ΅ ΠΊ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠΉ Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ Π²Π΅Ρ‚ΠΊΠΈ.ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ваши Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒ старыС, Π²Π°ΠΆΠ½ΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ git rebase для ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Ρ‹ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎ, ΠΈΠ½Π°Ρ‡Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ история вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° исчСзла.

Π’ этих ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… случаях, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ‡ΠΈΡΡ‚ΡƒΡŽ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° -i Π² git rebase позволяСт Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ rebase interactive . Π­Ρ‚ΠΎ Π΄Π°Π΅Ρ‚ Π²Π°ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π² процСссС, Π° Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ всС ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹.Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС ΠΎΠ± ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ… пСрСбазирования Π½Π° страницС git rebase.

ИзмСнСниС зафиксированных Ρ„Π°ΠΉΠ»ΠΎΠ²

Π’ΠΎ врСмя пСрСбазирования ΠΊΠΎΠΌΠ°Π½Π΄Π° edit ΠΈΠ»ΠΈ e приостановит воспроизвСдСниС пСрСбазирования для этого ΠΊΠΎΠΌΠΌΠΈΡ‚Π° ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ внСсти Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ измСнСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ git commit --amend Git ΠΏΡ€Π΅Ρ€Π²Π΅Ρ‚ воспроизвСдСниС ΠΈ выдаст сообщСниС:

  ΠžΡΡ‚Π°Π½ΠΎΠ²Π»Π΅Π½ΠΎ Π½Π° 5d025d1 ... Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ git commit --amend Когда Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€Π΅Π½Ρ‹ своими измСнСниями, запуститС git rebase --continue  
НСсколько сообщСний

КаТдая обычная фиксация Git Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ сообщСниС ΠΆΡƒΡ€Π½Π°Π»Π°, ΠΎΠ±ΡŠΡΡΠ½ΡΡŽΡ‰Π΅Π΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ Π² фиксации.Π­Ρ‚ΠΈ сообщСния ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Ρ†Π΅Π½Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± истории ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π’ΠΎ врСмя пСрСбазирования Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ нСсколько ΠΊΠΎΠΌΠ°Π½Π΄ ΠΏΡ€ΠΈ фиксации, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ сообщСния фиксации.

  • Reword ΠΈΠ»ΠΈ ‘r’ остановит воспроизвСдСниС с ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ΅ сообщСниС фиксации Π²ΠΎ врСмя.
  • Squash or ‘s’ Π²ΠΎ врСмя воспроизвСдСния с ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π»ΡŽΠ±Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΊ s , Π±ΡƒΠ΄ΡƒΡ‚ приостановлСны, ΠΈ Π²Π°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎ ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ сообщСния фиксации Π² объСдинСнноС сообщСниС. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΠ± этом Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² сквоша Π½ΠΈΠΆΠ΅.
  • Fixup ΠΈΠ»ΠΈ Β«fΒ» ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ эффСкт комбинирования, Ρ‡Ρ‚ΠΎ ΠΈ сквош. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ сквоша, фиксация фиксации Π½Π΅ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π΅Ρ‚ воспроизвСдСниС пСрСбазирования, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ для объСдинСния сообщСний фиксации. БообщСния ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹Ρ… ‘f’, Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚Π±Ρ€ΠΎΡˆΠ΅Π½Ρ‹ Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ сообщСния ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°.
Squash сохраняСт Ρ‡ΠΈΡΡ‚ΡƒΡŽ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ

Команда s «squash» — Π²ΠΎΡ‚ Π³Π΄Π΅ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ ΠΈΡΡ‚ΠΈΠ½Π½ΡƒΡŽ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΡΡ‚ΡŒ rebase. Squash позволяСт Π²Π°ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌΠΈ.Π­Ρ‚ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ обСспСчиваСт Β«Ρ‡ΠΈΡΡ‚ΡƒΡŽ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽΒ». Π’ΠΎ врСмя воспроизвСдСния смСщСния Git Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ rebase для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ фиксации. Π’ случаС сквош-ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Git ΠΎΡ‚ΠΊΡ€ΠΎΠ΅Ρ‚ ваш настроСнный тСкстовый Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ ΠΈ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ сообщСния ΠΊΠΎΠΌΠΌΠΈΡ‚Π°. Π’Π΅ΡΡŒ этот процСсс ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ rebase, ΠΈΠΌΠ΅ΡŽΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, Ρ‡Π΅ΠΌ любой ΠΈΠ· исходных ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ². ΠšΠΎΠΌΠΌΠΈΡ‚Ρ‹, ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΊ pick, Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, Ссли ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ фиксации Π±Ρ‹Π»ΠΈ пСрСписаны.

Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ для хостинга Git, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Bitbucket, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ «автоматичСского сТатия» ΠΏΡ€ΠΈ слиянии. ΠŸΡ€ΠΈ использовании ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π½Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±ΡƒΠ΄ΡƒΡ‚ автоматичСски ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π²Π΅Ρ‚ΠΊΠΈ. Для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ см. Β«Squash выполняСт Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ ΠΏΡ€ΠΈ слиянии Π²Π΅Ρ‚ΠΊΠΈ Git с BitbucketΒ».

РСзюмС

Git rebase Π΄Π°Π΅Ρ‚ Π²Π°ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ свою ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ, Π° ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ позволяСт Π²Π°ΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ это, Π½Π΅ оставляя «грязного» слСда. Π­Ρ‚ΠΎ Π΄Π°Π΅Ρ‚ свободу Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΈ ΠΈΡΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ошибки ΠΈ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π²Π°ΡˆΡƒ Ρ€Π°Π±ΠΎΡ‚Ρƒ, сохраняя ΠΏΡ€ΠΈ этом Ρ‡ΠΈΡΡ‚ΡƒΡŽ Π»ΠΈΠ½Π΅ΠΉΠ½ΡƒΡŽ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

Защитная сСтка: git reflog

Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½Ρ‹Π΅ ΠΆΡƒΡ€Π½Π°Π»Ρ‹, ΠΈΠ»ΠΈ Β«Ρ€Π΅Ρ„Π»ΠΎΠ³ΠΈΒ» — это ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Git ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ для записи ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ, примСняСмых ΠΊ подсказкам Π²Π΅Ρ‚Π²Π΅ΠΉ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ссылкам Π½Π° ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹. Reflog позволяСт Π²Π°ΠΌ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°ΠΌ, Π΄Π°ΠΆΠ΅ Ссли Π½Π° Π½ΠΈΡ… Π½Π΅ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ Π²Π΅Ρ‚ΠΊΠΈ ΠΈΠ»ΠΈ Ρ‚Π΅Π³ΠΈ. ПослС пСрСзаписи истории ΠΆΡƒΡ€Π½Π°Π» ссылок содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ старом состоянии Π²Π΅Ρ‚Π²Π΅ΠΉ ΠΈ позволяСт ΠΏΡ€ΠΈ нСобходимости Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ Π² это состояниС. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ваша подсказка Π²Π΅Ρ‚ΠΊΠΈ обновляСтся ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ (ΠΏΡƒΡ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π²Π΅Ρ‚Π²Π΅ΠΉ, Π²Π²ΠΎΠ΄Π° Π½ΠΎΠ²Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, пСрСзаписи истории ΠΈΠ»ΠΈ просто ΠΏΡƒΡ‚Π΅ΠΌ добавлСния Π½ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ²), новая запись Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒΡΡ Π² ΠΆΡƒΡ€Π½Π°Π» ссылок.Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ рассмотрим ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git reflog ΠΈ рассмотрим Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ распространСнныС примСнСния.

ИспользованиС

  git Ρ€Π΅Ρ„Π»ΠΎΠ³  

Π—Π΄Π΅ΡΡŒ отобраТаСтся ΠΆΡƒΡ€Π½Π°Π» ссылок для локального рСпозитория.

  git reflog - ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Π΄Π°Ρ‚Π°  

Π—Π΄Π΅ΡΡŒ отобраТаСтся ΠΆΡƒΡ€Π½Π°Π» с ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π΄Π°Ρ‚ΠΎΠΉ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 2 Π½Π΅Π΄Π΅Π»ΠΈ Π½Π°Π·Π°Π΄).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ git reflog , Π΄Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

  0a2e358 HEAD @ {0}: reset: ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π² HEAD ~ 2 0254ea7 HEAD @ {1}: checkout: ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ с 2.2 для мастСра c10f740 HEAD @ {2}: checkout: ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΎΡ‚ мастСра ΠΊ 2,2  

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΆΡƒΡ€Π½Π°Π»Π΅ ссылок ΠΏΠΎΠΊΠ°Π·Π°Π½ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΎΡ‚ мастСра ΠΊ Π²Π΅Ρ‚ΠΊΠ΅ 2.2 ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ. ΠžΡ‚Ρ‚ΡƒΠ΄Π° происходит ΠΏΠΎΠ»Π½Ρ‹ΠΉ сброс Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ старого ΠΊΠΎΠΌΠΌΠΈΡ‚Π°. ПослСднСС дСйствиС прСдставлСно Π²Π²Π΅Ρ€Ρ…Ρƒ с ΠΏΠΎΠΌΠ΅Ρ‚ΠΊΠΎΠΉ HEAD @ {0} .

Если окаТСтся, Ρ‡Ρ‚ΠΎ Π²Ρ‹ случайно Π²Π΅Ρ€Π½ΡƒΠ»ΠΈΡΡŒ Π½Π°Π·Π°Π΄, Π² ΠΆΡƒΡ€Π½Π°Π»Π΅ рСгистрации Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Π½ΠΎ, Ρ‡Ρ‚ΠΎ мастСр фиксации ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° (0254ea7) Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ случайно сбросили 2 фиксации.

git reset --hard 0254ea7

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Git reset, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ мастСр ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π½Π° Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ, которая Π±Ρ‹Π»Π° Ρ€Π°Π½ΡŒΡˆΠ΅.Π­Ρ‚ΠΎ обСспСчиваСт Π·Π°Ρ‰ΠΈΡ‚Ρƒ Π½Π° случай, Ссли история Π±Ρ‹Π»Π° случайно ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π°.

Π’Π°ΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΆΡƒΡ€Π½Π°Π» reflog обСспСчиваСт Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли измСнСния Π±Ρ‹Π»ΠΈ зафиксированы Π² вашСм локальном Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ, ΠΈ Ρ‡Ρ‚ΠΎ ΠΎΠ½ отслСТиваСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ пСрСмСщСния подсказки Π²Π΅Ρ‚ΠΊΠΈ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π². ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρƒ записСй Ρ€Π΅Ρ„Π»ΠΎΠ³Π° Π΅ΡΡ‚ΡŒ срок дСйствия. Π‘Ρ€ΠΎΠΊ дСйствия записСй Ρ€Π΅Ρ„Π»ΠΎΠ³Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ составляСт 90 Π΄Π½Π΅ΠΉ.

Для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ см. ΠΠ°ΡˆΡƒ страницу git reflog .

Π‘Π²ΠΎΠ΄ΠΊΠ°

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ обсудили нСсколько ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² измСнСния истории git ΠΈ ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ git.ΠœΡ‹ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ рассмотрСли процСсс git rebase. НСкоторыС ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ Π²Ρ‹Π²ΠΎΠ΄Ρ‹:

  • Π•ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ способов ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ git.
  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ git commit --amend , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ послСднСС сообщСниС ΠΆΡƒΡ€Π½Π°Π»Π°.
  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ git commit --amend , Ρ‡Ρ‚ΠΎΠ±Ρ‹ внСсти измСнСния Π² ΡΠ°ΠΌΡƒΡŽ послСднюю Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ.
  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ git rebase , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ Π²Π΅Ρ‚ΠΊΠΈ.
  • git rebase -i Π΄Π°Π΅Ρ‚ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ модификациями истории, Ρ‡Π΅ΠΌ стандартный git rebase.

Π£Π·Π½Π°ΠΉΡ‚Π΅ большС ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ рассмотрСли, Π½Π° ΠΈΡ… ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… страницах:

.

Π±Π°Π·ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄ Git | Π£Ρ‡Π΅Π±Π½ΠΈΠΊ Atlassian Git

git чистый

УдаляСт нСотслСТиваСмыС Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ· Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°. Π­Ρ‚ΠΎ логичСский Π°Π½Π°Π»ΠΎΠ³ git reset, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ) Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с отслСТиваСмыми Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ.

БвязанныС руководства

ΠžΡ‚ΠΌΠ΅Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ: git clean

git commit —amend

ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Ρ„Π»Π°Π³Π° —amend ΠΊΠΎΠΌΠ°Π½Π΄Π΅ git commit позволяСт Π²Π°ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΡΠ°ΠΌΡƒΡŽ послСднюю Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π·Π°Π±Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ опускаСтС Π²Π°ΠΆΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈΠ· сообщСния фиксации.

БвязанныС руководства

ΠŸΠ΅Ρ€Π΅ΠΏΠΈΡΡ‹Π²Π°Π΅ΠΌ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ: git commit —amend

git fetch

Fetching Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ Π²Π΅Ρ‚ΠΊΡƒ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ рСпозитория вмСстС со всСми связанными с Π½Π΅ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°ΠΌΠΈ ΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ. Но ΠΎΠ½ Π½Π΅ пытаСтся Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² ваш Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ. Π­Ρ‚ΠΎ Π΄Π°Π΅Ρ‚ Π²Π°ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ измСнСния ΠΏΠ΅Ρ€Π΅Π΄ объСдинСниСм ΠΈΡ… с вашим ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ.

БвязанныС руководства

Бинхронизация: git fetch
Бсылки ΠΈ Reflog: Refspecs
Бинхронизация: git pull

git init

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Git.Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΏΠΎΠ΄ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ вСрсий, это пСрвая ΠΊΠΎΠΌΠ°Π½Π΄Π°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ.

БвязанныС руководства

Настройка рСпозитория: git init

git rebase -i

Π€Π»Π°Π³ -i ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Π½Π°Ρ‡Π°Π»Π° ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ сСанса пСрСнастройки. Π­Ρ‚ΠΎ обСспСчиваСт всС прСимущСства ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ пСрСбазирования, Π½ΠΎ Π΄Π°Π΅Ρ‚ Π²Π°ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ, Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΠΏΠΎ Ρ…ΠΎΠ΄Ρƒ выполнСния.

БвязанныС руководства

Π˜ΡΡ‚ΠΎΡ€ΠΈΡ пСрСзаписи: git rebase -i

git reflog

Git отслСТиваСт обновлСния ΠΊΠΎΠ½Ρ‡ΠΈΠΊΠ° Π²Π΅Ρ‚ΠΎΠΊ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ reflog.Π­Ρ‚ΠΎ позволяСт Π²Π°ΠΌ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ рСвизиям, Π΄Π°ΠΆΠ΅ Ссли Π½Π° Π½ΠΈΡ… Π½Π΅ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ Π²Π΅Ρ‚ΠΊΠΈ ΠΈΠ»ΠΈ Ρ‚Π΅Π³ΠΈ.

БвязанныС руководства

Π˜ΡΡ‚ΠΎΡ€ΠΈΡ пСрСзаписи: git reflog

git ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ

Π£Π΄ΠΎΠ±Π½Ρ‹ΠΉ инструмСнт для администрирования ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. ВмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½Ρ‹ΠΉ URL-адрСс ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌ fetch, pull ΠΈ push, ΠΎΠ½ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ понятный ярлык.

БвязанныС руководства

Бинхронизация: git remote

.

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *