πŸ˜ΊπŸ™βœ… Как Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² Git: краткая инструкция для Π΄ΠΆΡƒΠ½ΠΎΠ²

РасскаТСм, ΠΊΠ°ΠΊ Git Ρ…Ρ€Π°Π½ΠΈΡ‚ Π΄Π°Π½Π½Ρ‹Π΅, отслСТиваСт измСнСния ΠΈ позволяСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ историСй ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ².

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

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Git ΠΏΠΎ-настоящСму эффСктивно, Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ систСма ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½Π° отслСТиваСт измСнСния: это ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π»Π΅Π³ΠΊΠΎ Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊ Π»ΡŽΠ±Ρ‹ΠΌ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌ процСссам, быстро ΠΈΡΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ошибки ΠΈ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ Π΄ΠΎΠ»Π³ΠΈΠ΅ часы Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Git

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

Как Git сохраняСт измСнСния

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ Ρ€Π°Π·Π±ΠΎΡ€Ρƒ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… этой ΠΌΠΎΠ΄Π΅Π»ΠΈ, Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Git Π½Π° самом Π±Π°Π·ΠΎΠ²ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ сохраняСт Π½Π΅ измСнСния, Π° «снимки» нашСго ΠΊΠΎΠ΄Π° (ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ). Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΠ°ΠΊΡ„Π°ΠΉΠ»Ρ‹ для эффСктивного сохранСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях фактичСски сохраняСт измСнСния (diffs, Π΄ΠΈΡ„Ρ„Ρ‹). ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠ½ создаСт Π΄ΠΈΡ„Ρ„Ρ‹ ΠΏΠΎ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΡŽ. Иногда Π΄ΠΈΡ„Ρ„Ρ‹ ΠΏΡ€ΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ выполнСния Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄: Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½ Ρ„Π°ΠΉΠ» Π±Ρ‹Π» ΡƒΠ΄Π°Π»Π΅Π½, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ» Π±Ρ‹Π» ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½.

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ обсудим основныС ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ Git ΠΈ ΠΈΡ… взаимосвязь Π² систСмС контроля вСрсий.

Π‘Π°ΠΌΠΎΠ΅ ΠΏΠΎΠ»Π½ΠΎΠ΅, Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΈ понятноС руководство ΠΏΠΎ Git – бСсплатная ΠΊΠ½ΠΈΠ³Π° Pro Git, прСкрасно пСрСвСдСнная Π½Π° русский язык.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠΎΠΌΠΌΠΈΡ‚

ΠšΠΎΠΌΠΌΠΈΡ‚ β€” это снимок ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΠΊΠΎΠ΄Π΅, основная Π΅Π΄ΠΈΠ½ΠΈΡ†Π° измСрСния Π² систСмС контроля вСрсий Git. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ прСдставляСт собой Π½Π°Π±ΠΎΡ€ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Ρ‚Π΅ΠΌ сохраняСтся ΠΈ становится доступным для просмотра ΠΈ восстановлСния. ΠšΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² случаС нСобходимости ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ вСрсии ΠΊΠΎΠ΄Π°. ΠšΠΎΠΌΠΌΠΈΡ‚ Π² Git Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя:

  • ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΡ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² (Ρƒ самого ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ, ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°, Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ Π½Π΅Ρ‚);
  • сообщСниС ΠΊΠΎΠΌΠΌΠΈΡ‚Π°;
  • ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± Π°Π²Ρ‚ΠΎΡ€Π΅ ΠΈ Π΄Π°Ρ‚Π΅ авторства (фактичСской Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΊΠ΅ со смСщСниСм часового пояса);
  • ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅Ρ€Π΅ ΠΈ Π΄Π°Ρ‚Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°;
  • ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, наши Ρ„Π°ΠΉΠ»Ρ‹ – ΠΏΡƒΡ‚ΡŒ ΠΊ Π½ΠΈΠΌ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ корня рСпозитория, ΠΏΡ€Π°Π²Π° доступа ΠΊ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС (UNIX), ΠΈ ΠΈΡ… содСрТимоС.

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, вычисляСмый с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ SHA1-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ…ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ Π½Π° основС всСй пСрСчислСнной Π²Ρ‹ΡˆΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. ИзмСнСниС любой части этой ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ измСнСнию Ρ…ΡΡˆΠ° ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° ΠΊΠΎΠΌΠΌΠΈΡ‚Π°.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅
Git постСпСнно ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π½Π° использованиС SHA-256 Π² качСствС Ρ…ΡΡˆΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Git ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π°Π΄Ρ€Π΅ΡΠ°Ρ†ΠΈΡŽ ΠΏΠΎ содСрТимому, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² Π½Π΅ΠΌ ΠΈΠΌΠ΅Π΅Ρ‚ имя, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ слСдуСт ΠΈΠ· Π΅Π³ΠΎ содСрТимого (Π² Π²ΠΈΠ΄Π΅ Π΅Π³ΠΎ SHA-1 Ρ…ΡΡˆΠ°).

РаньшС Git Ρ…Ρ€Π°Π½ΠΈΠ» всС Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ„Π°ΠΉΠ»Π°Ρ… ΠΈ ΠΌΡ‹ Π΄ΠΎ сих ΠΏΠΎΡ€ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² качСствС своСобразного Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°. Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ Ρ„Π°ΠΉΠ»Π° сохраняСтся Π² Π²ΠΈΠ΄Π΅ Β«Π±Π»ΠΎΠ±Π°Β» (blob –массив Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…), ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ сохраняСтся Π² Π²ΠΈΠ΄Π΅ Β«Π΄Π΅Ρ€Π΅Π²Π°Β» (тСкстового Ρ„Π°ΠΉΠ»Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ Ρ„Π°ΠΉΠ»Ρ‹ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ с ΠΈΡ… ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, Ρ€Π΅ΠΆΠΈΠΌΠ°ΠΌΠΈ ΠΈ SHA-1 Ρ…ΡΡˆΠ°ΠΌΠΈ, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΌΠΈ ΠΈΡ… содСрТимоС, Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ ΠΈΡ… ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ с ΠΈΡ… ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΈ SHA-1 ΠΈΡ… Β«Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π²Β»).

ΠšΠΎΠΌΠΌΠΈΡ‚ ΠΈ Π΅Π³ΠΎ Π΄Π΅Ρ€Π΅Π²ΠΎ

Π ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π² Git ΡΠΎΠ·Π΄Π°ΡŽΡ‚ структуру Π² Ρ„ΠΎΡ€ΠΌΠ΅ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ацикличСского Π³Ρ€Π°Ρ„Π°, которая ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅. НаправлСнный ацикличСский Π³Ρ€Π°Ρ„ состоит ΠΈΠ· Π²Π΅Ρ€ΡˆΠΈΠ½ (ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ²) ΠΈ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… Ρ€Π΅Π±Π΅Ρ€ (связСй ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΌΠΈ ΠΈ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°ΠΌΠΈ). Вакая структура позволяСт ΠΏΡ€ΠΎΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ связан Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ»ΠΈ нСсколькими Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΌΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°ΠΌΠΈ, ΠΈ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ†ΠΈΠΊΠ»ΠΎΠ², Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ собствСнным ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌ.

ΠšΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΠΈ ΠΈΡ… Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΈ
🐍 Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ² Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π½Π° нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° питониста»

Бсылки, Π²Π΅Ρ‚ΠΊΠΈ ΠΈ Ρ‚Π΅Π³ΠΈ

Π₯отя Git позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ SHA1-прСфиксы вмСсто ΠΏΠΎΠ»Π½Ρ‹Ρ… SHA1-Ρ…Π΅ΡˆΠ΅ΠΉ, Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Ρ‚ΡŒ ΠΈΡ… слоТно, Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ – Π½Π΅ΡƒΠ΄ΠΎΠ±Π½ΠΎ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² систСмС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ссылки – ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΊΠΈ, названия ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ ΠΏΠΎ собствСнному ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Π½ΠΈΡŽ. Бсылки ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π»Π΅Π³ΠΊΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°ΠΌ Π² нашСй истории. Π’ Git Π΅ΡΡ‚ΡŒ нСсколько Ρ‚ΠΈΠΏΠΎΠ² ссылок:

  • Π’Π΅Ρ‚ΠΊΠΈ (Branches) – это ссылки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ. Они ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½ΠΎΠ²Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ»ΠΈ исправлСния ошибок Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅, которая Π·Π°Ρ‚Π΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ объСдинСна с основной Π²Π΅Ρ‚ΠΊΠΎΠΉ. Названия Π²Π΅Ρ‚Π²Π΅ΠΉ (main ΠΈΠ»ΠΈ master) Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ особого значСния ΠΈ ваТности.
  • Π’Π΅Π³ΠΈ (Tags) – это нСизмСняСмыС ссылки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ для обозначСния ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… вСрсий (Ρ€Π΅Π»ΠΈΠ·ΠΎΠ²) ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π²Π΅Ρ‚ΠΎΠΊ, Ρ‚Π΅Π³ΠΈ Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ, ΠΎΠ½ΠΈ всСгда ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΊΠΎΠΌΠΌΠΈΡ‚.
  • HEAD – это ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ ссылка, которая ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ½Π° ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π²Π΅Ρ‚ΠΊΡƒ, Π° Π½Π΅ Π½Π° ΠΊΠΎΠΌΠΌΠΈΡ‚ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ – это связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π²Π΅Ρ‚ΠΊΠΈ Π² Git ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌΡ‹ΠΌΠΈ ссылками, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° послСдний ΠΊΠΎΠΌΠΌΠΈΡ‚ Π² этой Π²Π΅Ρ‚ΠΊΠ΅. Когда Π²Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚Π΅ΡΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Π΅Ρ‚ΠΊΠ°ΠΌΠΈ, HEAD автоматичСски обновляСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° послСдний ΠΊΠΎΠΌΠΌΠΈΡ‚ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠ΅.
  • Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ссылки (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, FETCH_HEAD ΠΈ ORIG_HEAD) Git создаСт Π²ΠΎ врСмя Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. FETCH_HEAD ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° послСдний ΠΊΠΎΠΌΠΌΠΈΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ ΠΈΠ· ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ рСпозитория. ORIG_HEAD ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для хранСния ссылки Π½Π° ΠΊΠΎΠΌΠΌΠΈΡ‚ ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ (git reset ΠΈΠ»ΠΈ git rebase).
Π˜ΡΡ‚ΠΎΡ€ΠΈΡ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π² Π²Π΅Ρ‚ΠΊΠ΅

Бостояния Ρ„Π°ΠΉΠ»ΠΎΠ² Π² Git

Π€Π°ΠΉΠ» Π² Git ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· Ρ‚Ρ€Π΅Ρ… основных состояний:

  • Π˜Π·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹ΠΉ (modified): Π­Ρ‚ΠΎ состояниС ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ Ρ„Π°ΠΉΠ», Π½ΠΎ Π΅Ρ‰Π΅ Π½Π΅ зафиксировали эти измСнСния Π² Git. Π€Π°ΠΉΠ»Ρ‹ Π² этом состоянии находятся Π² вашСй Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π΅Ρ‰Π΅ Π½Π΅ Π±Ρ‹Π»ΠΎ зафиксировано Π² Git.
  • ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½Ρ‹ΠΉ (ΠΈΠ»ΠΈ индСксированный, staged): Когда Π²Ρ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ Π·Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ измСнСния, Π²Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚Π΅ Ρ„Π°ΠΉΠ» ΠΈΠ· состояния Β«ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹ΠΉΒ» Π² состояниС «индСксированный». Π€Π°ΠΉΠ»Ρ‹ Π² этом состоянии Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΊ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρƒ ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚.
  • Зафиксированный (committed): Когда Π²Ρ‹ выполняСтС ΠΊΠΎΠΌΠΌΠΈΡ‚ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git commit, Ρ„Π°ΠΉΠ»Ρ‹ Π² состоянии «индСксированныС» ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² состояниС «зафиксированныС».

Π’ Git-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π½Ρ‹Π΅ сСкции:

  • Рабочая дирСктория (Working Directory) – это дирСктория Π² локальной Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС, Π³Π΄Π΅ находятся Ρ„Π°ΠΉΠ»Ρ‹ вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° – мСсто, Π³Π΄Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹.
  • ΠžΠ±Π»Π°ΡΡ‚ΡŒ индСксированных Ρ„Π°ΠΉΠ»ΠΎΠ² (Staging Area) – это ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠ΅ΠΉ ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠ΅ΠΉ Git. ВсС Ρ„Π°ΠΉΠ»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΊ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρƒ, хранятся здСсь.
  • ДирСктория Git (Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ) (Git Directory) – это мСсто, Π³Π΄Π΅ Git Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΡƒΡŽ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… для вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π­Ρ‚ΠΎ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ваТная Ρ‡Π°ΡΡ‚ΡŒ Git – ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½Π° копируСтся, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΊΠ»ΠΎΠ½ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ.

Рабочая дирСктория инициализируСтся ΠΈΠ· ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° ΠΈΠ· вашСй истории. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ рСпозитория ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Π΅Ρ‚ΠΊΠ°ΠΌΠΈ, Git создаСт Ρ€Π°Π±ΠΎΡ‡ΡƒΡŽ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ, которая ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ состояниС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π² Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅.

Рабочая дирСктория, ΠΎΠ±Π»Π°ΡΡ‚ΡŒ индСксированных Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ

По-Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ связь ΠΌΠ΅ΠΆΠ΄Ρƒ этими концСпциями ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊ:

ΠšΠΎΠΌΠΌΠΈΡ‚Ρ‹, ссылки ΠΈ состояния Ρ„Π°ΠΉΠ»ΠΎΠ²

На Π·Π°ΠΌΠ΅Ρ‚ΠΊΡƒ: ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ²

Git прСдоставляСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ»ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ. Π’Π°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ пСрСнСсСниС Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ вашСй систСмой сборки, Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΠ΄Π° ΠΈΠ»ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой. Для игнорирования Ρ„Π°ΠΉΠ»ΠΎΠ² Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΈΡ… названия/Ρ‚ΠΈΠΏΡ‹ (ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ glob-ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹) Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹:

  • Π€Π°ΠΉΠ» .gitignore Π² любом мСстС вашСго рСпозитория опрСдСляСт ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ игнорирования для Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ находится. Π—Π΄Π΅ΡΡŒ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ Ρ„Π°ΠΉΠ»Ρ‹, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ вашСй систСмой сборки ΠΈΠ»ΠΈ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, build/ для ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Gradle, _pycache_ для ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Django ΠΈ Ρ‚.Π΄.)
  • Π€Π°ΠΉΠ» .git/info/exclude – Ρ„Π°ΠΉΠ» игнорирования для локального рСпозитория Π½Π° вашСй машинС. Он Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ Π² ΠΊΠΎΠΏΠΈΠΈ рСпозитория, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠ»ΠΎΠ½ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΈΠ»ΠΈ ΡΠΊΠ°Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ.
  • И, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, ~/.config/git/ignore Π³Π»ΠΎΠ±Π°Π»Π΅Π½ для вашСго ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° (Ρ‚ΠΎΡ‡Π½Π΅Π΅, вашСй ΡƒΡ‡Π΅Ρ‚Π½ΠΎΠΉ записи). Π—Π΄Π΅ΡΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, спСцифичныС для вашСй ΠΌΠ°ΡˆΠΈΠ½Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, .DS_Store Π½Π° macOS ΠΈΠ»ΠΈ Thumbs.db Π½Π° Windows).

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π² Git ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этих ΠΊΠΎΠΌΠ°Π½Π΄:

  • git init – ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ. Π­Ρ‚ΠΎ пСрвая ΠΊΠΎΠΌΠ°Π½Π΄Π°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ выполняСтС, ΠΊΠΎΠ³Π΄Π° создаСтС Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚.
  • git status – ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ состояниС Π²Π°ΡˆΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ²: ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹ Π±Ρ‹Π»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹, Π½ΠΎ Π΅Ρ‰Π΅ Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π² индСкс (staged), ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹ ΡƒΠΆΠ΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π² индСкс.
  • git diff – ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ различия ΠΌΠ΅ΠΆΠ΄Ρƒ Π»ΡŽΠ±Ρ‹ΠΌΠΈ двумя состояниями Π² вашСм Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, индСксС, HEAD ΠΈΠ»ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Π»ΡŽΠ±Ρ‹ΠΌΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°ΠΌΠΈ.
  • git log – Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΏΠΎΠ»Π½ΡƒΡŽ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ².
  • git add – добавляСт Ρ„Π°ΠΉΠ»Ρ‹ Π² индСкс. Π­Ρ‚ΠΎ дСлаСтся ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ измСнСния Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚.
  • git commit – пСрСносит индСксированныС Ρ„Π°ΠΉΠ»Ρ‹ Π² ΠΊΠΎΠΌΠΌΠΈΡ‚, добавляя сообщСниС. Π­Ρ‚Π° опСрация сохраняСт измСнСния Π² истории Git.
  • git add -p – добавляСт Ρ„Π°ΠΉΠ»Ρ‹ Π² индСкс ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ. Π­Ρ‚ΠΎ позволяСт Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ измСнСния Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅.
  • git branch – ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π²Π΅Ρ‚ΠΊΠΈ ΠΈΠ»ΠΈ создаСт Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ.
  • git switch (ΠΈΠ»ΠΈ git checkout) – ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π²Π΅Ρ‚ΠΊΡƒ (ΠΈΠ»ΠΈ любой ΠΊΠΎΠΌΠΌΠΈΡ‚, любоС Π΄Π΅Ρ€Π΅Π²ΠΎ) Π² ваш Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³.
  • git grep – поиск Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, индСксС ΠΈΠ»ΠΈ любом ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅. Π­Ρ‚ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π½Π°Ρ вСрсия ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ grep -R.
  • git blame – ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ послСдний ΠΊΠΎΠΌΠΌΠΈΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ» ΠΊΠ°ΠΆΠ΄ΡƒΡŽ строку Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°: ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΡ‚ΠΎ Π²ΠΈΠ½ΠΎΠ²Π΅Π½ Π² Π±Π°Π³Π΅.
  • git stash – ΠΎΡ‚ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ Π½Π΅ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½Π½Ρ‹Π΅ измСнСния Π² сторону (сюда ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ индСксированныС Ρ„Π°ΠΉΠ»Ρ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ отслСТиваСмыС Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ· Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°), ΠΈ ΠΏΠΎΠ·ΠΆΠ΅ Π²Ρ‹Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΈΡ… для Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠΈΡ… дСйствий.

ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Π΅Ρ‚ΠΊΠ°ΠΌΠΈ ΠΈ Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠ΅

Когда Π²Ρ‹ создаСтС ΠΊΠΎΠΌΠΌΠΈΡ‚ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ git commit, Git Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ создаСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°, Π½ΠΎ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ HEAD Π½Π° Π½Π΅Π³ΠΎ. Если HEAD ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π²Π΅Ρ‚ΠΊΡƒ, ΠΊΠ°ΠΊ это ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈ Π±Ρ‹Π²Π°Π΅Ρ‚, Ρ‚ΠΎ эта Π²Π΅Ρ‚ΠΊΠ° Ρ‚Π°ΠΊΠΆΠ΅ сдвигаСтся Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚.

Если Π²Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚Π΅ΡΡŒ Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ git switch ΠΈΠ»ΠΈ git checkout, ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ HEAD пСрСмСщаСтся Π½Π° эту Π½ΠΎΠ²ΡƒΡŽ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ. Π Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΈ индСкс Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² соотвСтствии с состояниСм этого ΠΊΠΎΠΌΠΌΠΈΡ‚Π°.

Π’ случаС, Ссли тСкущая Π²Π΅Ρ‚ΠΊΠ° являСтся ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ, ΠΈ Π²Ρ‹ Π΄Π΅Π»Π°Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠ΅, истории этих Π΄Π²ΡƒΡ… Π²Π΅Ρ‚ΠΎΠΊ Π½Π°Ρ‡Π½ΡƒΡ‚ Ρ€Π°Π·Π²Π΅Ρ‚Π²Π»ΡΡ‚ΡŒΡΡ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² Ρ€Π°Π·Π½Ρ‹Π΅ стороны: каТдая ΠΈΠ· Π½ΠΈΡ… Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ свои ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅. ΠŸΡ€ΠΈ нСобходимости эти Π²Π΅Ρ‚ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄ branch, checkout ΠΈ commit.

РазвСтвлСнная история

На Π·Π°ΠΌΠ΅Ρ‚ΠΊΡƒ: Git ΠΏΠΎΠΌΠ½ΠΈΡ‚ всС

Git сохраняСт ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ, ΠΈ Π΄Π°ΠΆΠ΅ Ссли Π²Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git commit --amend), это Π½Π΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ старый ΠΊΠΎΠΌΠΌΠΈΡ‚ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ. ВмСсто этого, Git создаст Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ с Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ SHA1. Π‘ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ Git удаляСт старыС ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΠΈΠ· рСпозитория, Ссли ΠΎΠ½ΠΈ большС Π½Π΅ доступны ΠΈΠ· любой ссылки – этот процСсс называСтся сборкой мусора.

Π’Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² ΠΏΠΎΠ»Π΅Π·Π½ΠΎ – Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли Π²Ρ‹ случайно ΡƒΠ΄Π°Π»ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ, Ссли Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅ Π΅Π³ΠΎ SHA1-ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€. Π—Π΄Π΅ΡΡŒ пригодится ΠΊΠΎΠΌΠ°Π½Π΄Π° git reflog, которая позволяСт ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ Π²Π°ΡˆΠΈΡ… дСйствий Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΠΈ Π½Π°ΠΉΡ‚ΠΈ SHA1-ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°. Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ <branch-name>@{<n>} для ссылки Π½Π° ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Ρ‚ΠΊΠ° ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π»Π° Π² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ. НапримСр, main@{1} Π±ΡƒΠ΄Π΅Ρ‚ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° послСдний ΠΊΠΎΠΌΠΌΠΈΡ‚, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π»Π° Π²Π΅Ρ‚ΠΊΠ° main ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ.

Π Π°Π±ΠΎΡ‚Π° с Π²Π΅Ρ‚ΠΊΠ°ΠΌΠΈ

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Π²Π΅Ρ‚ΠΊΠ°ΠΌΠΈ Π² Git выглядят Ρ‚Π°ΠΊ:

БлияниС. Π’Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠ΅ Π² Git позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Π»ΠΈΠ½ΠΈΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π’Π°ΠΊΠΈΠ΅ Π»ΠΈΠ½ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ впослСдствии ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git merge. Π­Ρ‚ΠΎ особСнно ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄Π½Π° Π²Π΅Ρ‚ΠΊΠ° являСтся ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌ Π΄Ρ€ΡƒΠ³ΠΎΠΉ – Π² этом случаС Git ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ быстроС слияниС (fast-forward merge), Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ процСсс.

ΠžΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ Π²Π΅Ρ‚Π²Π΅ΠΉ. Git позволяСт Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΎΠ΄Π½Ρƒ Π²Π΅Ρ‚ΠΊΡƒ для отслСТивания Π΄Ρ€ΡƒΠ³ΠΎΠΉ – ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°ΡŽΡ‰Π°Ρ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ восходящСй (upstream) Π²Π΅Ρ‚ΠΊΠΎΠΉ. Команда git status ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚, насколько Π΄Π²Π΅ Π²Π΅Ρ‚ΠΊΠΈ ΠΎΡ‚ΠΊΠ»ΠΎΠ½ΠΈΠ»ΠΈΡΡŒ Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°, ΠΈ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Π½ΡƒΠΆΠ½ΠΎ Π»ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ, ΠΈΠ»ΠΈ Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ быстро ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π²ΠΏΠ΅Ρ€Π΅Π΄ (fast-forward).

Cherry-pick (Π²Ρ‹Π±ΠΎΡ€ΠΊΠ°). Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ измСнСния ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ, Π½ΠΎ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠ»ΠΈΠ²Π°Ρ‚ΡŒ Π²Π΅Ρ‚ΠΊΠΈ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git cherry-pick. Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° позволяСт Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ измСнСния ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ, Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ измСнСния.

Rebase (пСрСнос). Команда git rebase – ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт для пСрСноса («пСрСбазирования») Π½Π°Π±ΠΎΡ€Π° ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π½Π° Π½ΠΎΠ²ΡƒΡŽ Π±Π°Π·Ρƒ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ нСсколько ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π² ΠΎΠ΄ΠΈΠ½.

Команда rebase ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² ΠΈ Ρ†Π΅Π»Π΅Π²ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ. ΠšΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΠΈΠ· Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° Β«ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΡƒΡŽΡ‚ΡΡΒ» Π½Π° Ρ†Π΅Π»Π΅Π²ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ, Π° Π²Π΅Ρ‚ΠΊΠ°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ Π² качСствС ΠΊΠΎΠ½Ρ†Π° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°, обновляСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹:

git rebase --onto=<target> <start> <end>, Π³Π΄Π΅ <target> – это цСлСвая Π²Π΅Ρ‚ΠΊΠ°, <start> – Π½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ Ρ‚ΠΎΡ‡ΠΊΠ° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², Π° <end> – конСчная Ρ‚ΠΎΡ‡ΠΊΠ° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°. НапримСр, ΠΊΠΎΠΌΠ°Π½Π΄Π° git rebase upstream HEAD ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΡƒΠ΅Ρ‚ всС ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ с послСднСго ΠΎΠ±Ρ‰Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄ΠΊΠ° восходящСй ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠΈ Π½Π° Π²ΠΎΡΡ…ΠΎΠ΄ΡΡ‰ΡƒΡŽ, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ rebase измСняСт ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² (история ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠΈ становится Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ ΠΈ Π½Π΅ содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ‚ΠΎΠΌ, ΠΎΡ‚ΠΊΡƒΠ΄Π° ΠΏΡ€ΠΈΡˆΠ»ΠΈ эти ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹), ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ с ΠΎΡΡ‚ΠΎΡ€ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, использованиС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ, Ссли Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΡƒΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ измСнСния ΠΈΠ· Π²Π΅Ρ‚ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π½Π° ΠΈΡ… основС ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π² общСдоступный Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ. Π’ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… случаях вмСсто rebase Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ merge.

Π˜Π½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ rebase. Команда git rebase -i позволяСт Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ нСсколько ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π² ΠΎΠ΄ΠΈΠ½, ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΡ… порядок ΠΈΠ»ΠΈ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½Ρ‹. Π•Ρ‰Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ€Π΅Π±Π΅ΠΉΠ· Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅, ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ git commit --amend) ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ΠΌ пСрСбазирования. Другая супСрполСзная Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ – с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΡ†ΠΈΠΈ --exec ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, которая Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ пСрСносимым ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π΅ сломался. ΠžΠΏΡ†ΠΈΡ --exec Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈ Π² ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ rebase.

БовмСстная Ρ€Π°Π±ΠΎΡ‚Π°

ВсС рассмотрСнныС Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΎΡ‚Π½ΠΎΡΠΈΠ»ΠΈΡΡŒ ΠΊ Ρ€Π°Π±ΠΎΡ‚Π΅ Π² ΠΎΠ΄ΠΈΠ½ΠΎΡ‡ΠΊΡƒ, Π² вашСм собствСнном Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ. Но Git ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для совмСстной Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π°Π΄ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌΠΈ, Π° ΡƒΠΌΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌΡƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ. Рассмотрим основныС ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ.

Π£Π΄Π°Π»Π΅Π½Π½Ρ‹Π΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ

Когда Π²Ρ‹ ΠΊΠ»ΠΎΠ½ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, ΠΎΠ½ становится ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅ΠΌ (remote) вашСго локального рСпозитория, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΌ origin. Как ΠΈ master, это просто Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΈ само ΠΏΠΎ сСбС ΠΎΠ½ΠΎ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ особого значСния, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ случаСв, ΠΊΠΎΠ³Π΄Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½, ΠΈ origin ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π’Ρ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, создавая Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΠΈ Π²Π΅Ρ‚ΠΊΠΈ (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ„ΠΎΡ€ΠΊΠΈ ΠΎΡ‚ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ), a ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Π² это врСмя, скорСС всСго, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΠΈ Π²Π΅Ρ‚ΠΊΠΈ ΠΎΡ‚ своСго Π°Π²Ρ‚ΠΎΡ€Π°. Если Π²Ρ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ эти ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Π΅ измСнСния Π² ваш Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΈ быстро ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ измСнСния Π²Ρ‹ сдСлали локально ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΌ, ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ refs/remote. Π­Ρ‚ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ пространство ΠΈΠΌΠ΅Π½, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Git Ρ…Ρ€Π°Π½ΠΈΡ‚ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Π΅ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ Π²Π΅Ρ‚ΠΊΠΈ, Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ состояниС ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ рСпозитория. Π’Π°ΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Π΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ находятся Π² ΠΎΠ±Π»Π°ΠΊΠ΅, ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π½Π° Ρ‚ΠΎΠΉ ΠΆΠ΅ машинС, ΠΈ доступ ΠΊ Π½ΠΈΠΌ осущСствляСтся нСпосрСдствСнно ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы. Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ Π²Π΅Ρ‚ΠΊΠΈ хранятся Π² пространствС ΠΈΠΌΠ΅Π½ refs/heads/, Π° Ρ‚Π΅Π³ΠΈ Π² refs/tags/ (Ρ‚Π΅Π³ΠΈ ΠΈΠ· ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Ρ… Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π² ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ прямо Π² refs/tags/, поэтому, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Ρ‹ тСряСтС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΎΠΌ, ΠΎΡ‚ΠΊΡƒΠ΄Π° ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΡˆΠ»ΠΈ).

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…

Когда Π²Ρ‹ выполняСтС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git fetch, git pull ΠΈΠ»ΠΈ git remote update, Git устанавливаСт связь с ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅Ρ‰Π΅ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π² вашСм локальном Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ. ΠŸΡ€ΠΈ этом ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‚ΡΡ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Π΅ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ Π²Π΅Ρ‚ΠΊΠΈ. Π’ΠΎΡ‡Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ ссылок, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Ρ‹, ΠΈ мСсто назначСния опрСдСляСтся ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ git fetch (Π² Π²ΠΈΠ΄Π΅ refspecs) ΠΈ значСниями, установлСнными ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² Ρ„Π°ΠΉΠ»Π΅ .git/config вашСго рСпозитория. Π­Ρ‚ΠΈ значСния, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ git clone ΠΈΠ»ΠΈ git remote add ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ всСх Π²Π΅Ρ‚ΠΎΠΊ (всСх элСмСнтов ΠΈΠ· ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° refs/heads/ Π² ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ) ΠΈ размСщСния ΠΈΡ… Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ refs/remote/<remote> (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, refs/remote/origin/ для ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ рСпозитория origin). ΠŸΡ€ΠΈ этом ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ ΠΈΠΌΠ΅Π½Π° Π²Π΅Ρ‚ΠΎΠΊ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Π΅Ρ‚ΠΊΠ° refs/heads/main Π² ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ становится локальной Π²Π΅Ρ‚ΠΊΠΎΠΉ refs/remote/origin/main).

Π£Π΄Π°Π»Π΅Π½Π½Ρ‹Π΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Π΅ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ Π²Π΅Ρ‚ΠΊΠΈ

ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π²Ρ‹ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠ»ΠΈ измСнСния ΠΈΠ· ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ рСпозитория с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git fetch, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ эти измСнСния с вашСй локальной Π²Π΅Ρ‚ΠΊΠΎΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git merge ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Π°ΡˆΡƒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°ΡŽΡ‰Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git rebase. Команда git pull Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для выполнСния этих дСйствий, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½Π° выполняСт сначала git fetch, Π° Π·Π°Ρ‚Π΅ΠΌ автоматичСски Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ git merge ΠΈΠ»ΠΈ git rebase Π² зависимости ΠΎΡ‚ вашСй ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ.

ΠšΡΡ‚Π°Ρ‚ΠΈ, Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… случаях Git автоматичСски настраиваСт ΡƒΠ΄Π°Π»Π΅Π½Π½ΡƒΡŽ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°ΡŽΡ‰ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ ΠΊΠ°ΠΊ Π²ΠΎΡΡ…ΠΎΠ΄ΡΡ‰ΡƒΡŽ для локальной Π²Π΅Ρ‚ΠΊΠΈ ΠΏΡ€ΠΈ Π΅Π΅ создании (Git сообщит Π²Π°ΠΌ ΠΎΠ± этом, ΠΊΠΎΠ³Π΄Π° это ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚). Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git pull для обновлСния локальной Π²Π΅Ρ‚ΠΊΠΈ Π±Π΅Π· нСобходимости Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅.

ΠŸΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ

Если Π΄Ρ€ΡƒΠ³ΠΈΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ измСнСния ΠΈΠ· вашСго локального рСпозитория, ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π»ΠΈΠ±ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ваш Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΊΠ°ΠΊ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ ΠΈ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ (это ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ сСтСвой доступ ΠΊ Π²Π°ΡˆΠ΅ΠΌΡƒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρƒ), Π»ΠΈΠ±ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ сами ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ измСнСния Π² ΠΎΠ±Ρ‰Π΅ΠΌ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ. Когда Π²Ρ‹ проситС ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ измСнСния ΠΈΠ· вашСго ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ рСпозитория ΠΈ внСсти ΠΈΡ… Π² ΠΎΠ±Ρ‰ΠΈΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, это называСтся запросом Π½Π° вытягиваниС (pull request) – процСсс, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π²Ρ‹ ΡƒΠΆΠ΅ навСрняка ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Π»ΠΈΡΡŒ Π½Π° GitHub ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ….

ΠŸΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΡ (push) ΠΏΠΎΡ…ΠΎΠΆΠ° Π½Π° ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ (pull) Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚: Π²Ρ‹ отправляСтС свои ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π² ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΈ обновляСтС Π΅Π³ΠΎ Π²Π΅Ρ‚ΠΊΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π»Π° Π½Π° Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹. Π’ качСствС ΠΌΠ΅Ρ€Ρ‹ бСзопасности Git Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ быстроС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Ρ… Π²Π΅Ρ‚ΠΎΠΊ; Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ измСнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ обновят ΡƒΠ΄Π°Π»Π΅Π½Π½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ нСбыстрым способом, Π²Π°ΠΌ придСтся ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΈΡ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ git push --force-with-lease (ΠΈΠ»ΠΈ git push --force, Π½ΠΎ Π±ΡƒΠ΄ΡŒΡ‚Π΅ остороТны: --force-with-lease сначала ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ваша удалСнная ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°ΡŽΡ‰Π°Ρ Π²Π΅Ρ‚ΠΊΠ° соотвСтствуСт Π²Π΅Ρ‚ΠΊΠ΅ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ рСпозитория, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π» измСнСния Π² Π²Π΅Ρ‚ΠΊe с Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΊΠ°ΠΊ Π²Ρ‹ послСдний Ρ€Π°Π· ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π»ΠΈ Π΅Π΅; --force Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ, дСлая Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π΅ΠΌΡƒ ΠΏΡ€ΠΈΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚Π΅, Π½Π° ваш страх ΠΈ риск).

Как ΠΈ с git fetch, Π²Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚Π΅ Π²Π΅Ρ‚ΠΊΠΈ для обновлСния Π² ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git push, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Git обСспСчиваСт настройки ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ссли Π²Ρ‹ этого Π½Π΅ сдСлаСтС. Если Π²Ρ‹ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΡƒΠΊΠ°ΠΆΠ΅Ρ‚Π΅, Git Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΈΠ· ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ восходящСй Π²Π΅Ρ‚ΠΊΠΈ, поэтому Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв git push эквивалСнтно git push origin. На самом Π΄Π΅Π»Π΅ это сокращСниС для git push origin main (ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ тСкущая Π²Π΅Ρ‚ΠΊΠ° β€” main), ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ само ΠΏΠΎ сСбС являСтся сокращСниСм для git push origin main:main (Π° это краткая вСрсия git push origin refs/heads/main:refs/heads/main), Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ refs/heads/main Π² refs/heads/main ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ рСпозитория origin.

ΠŸΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΡ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² git push

Π›ΡƒΡ‡ΡˆΠΈΠ΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ

Π­Ρ‚ΠΈ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ².

ΠŸΡ€ΠΈ совмСстной Ρ€Π°Π±ΠΎΡ‚Π΅ Π½Π°Π΄ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

  • Π Π°Π·ΡƒΠΌΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ слияниС.
  • ΠŸΠΈΡˆΠΈΡ‚Π΅ Ρ‡Π΅Ρ‚ΠΊΠΈΠ΅ ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ сообщСния ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ².
  • Π‘ΠΎΠ·Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ – ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ нСзависимо ΠΎΡ‚ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π² истории.
  • НС Ρ€Π°Π±ΠΎΡ‚Π°ΠΉΡ‚Π΅ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π½Π° Π²Π΅Ρ‚ΠΊΠ΅ main (ΠΈΠ»ΠΈ master, ΠΈΠ»ΠΈ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅, которая Π½Π΅ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Π°ΠΌ). ВмСсто этого создавайтС Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ Π²Π΅Ρ‚ΠΊΠΈ. Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π½Π°Π΄ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ. Π₯ΠΎΡ‚ΠΈΡ‚Π΅ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ошибкой ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ, оТидая Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ ΠΏΠΎ инструкциям ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ? ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ΡΡŒ Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ, Π²Ρ‹ Π²Π΅Ρ€Π½Π΅Ρ‚Π΅ΡΡŒ ΠΊ Π½Π΅ΠΉ ΠΏΠΎΠ·ΠΆΠ΅, ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΠ²ΡˆΠΈΡΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ· ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ рСпозитория – Ссли ваши Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ Π²Π΅Ρ‚ΠΊΠΈ просто ΡΠ²Π»ΡΡŽΡ‚ΡΡ копиями ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Ρ… Π²Π΅Ρ‚ΠΎΠΊ с Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² (Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ случаСв, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ измСнСния Π² эти Π²Π΅Ρ‚ΠΊΠΈ).
  • НС ΡΡ‚Π΅ΡΠ½ΡΠΉΡ‚Π΅ΡΡŒ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² (git commit --amend ΠΈ/ΠΈΠ»ΠΈ git rebase -i), Π½ΠΎ Π½Π΅ Π΄Π΅Π»Π°ΠΉΡ‚Π΅ это слишком часто. Π‘ΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ ΡΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Π»ΠΊΠΈΡ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π²ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹, ΠΈ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ/ΠΎΡ‡ΠΈΡ‰Π°Ρ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ Сю.
  • Аналогично, Π½Π΅ ΡΡ‚Π΅ΡΠ½ΡΠΉΡ‚Π΅ΡΡŒ ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ свои Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ Π²Π΅Ρ‚ΠΊΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ измСнСния Π² Π²ΠΎΡΡ…ΠΎΠ΄ΡΡ‰ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ (Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π²Ρ‹ Π½Π΅ подСлились этой Π²Π΅Ρ‚ΠΊΠΎΠΉ, послС Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌΡƒ процСссу вСтвлСния ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°).
  • Π’ случаС возникновСния ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ – ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ gitk, gitk HEAD @{1} ΠΈΠ»ΠΈ gitk --all, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Π°ΡˆΡƒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ. Из этого Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌΡƒ ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ (git reset @{1}) ΠΈΠ»ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ (с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ извлСчСния Π½ΡƒΠΆΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² ΠΈ Ρ‚. Π΄.) А Ссли Π½Π΅ΠΏΡ€ΠΈΡΡ‚Π½ΠΎΡΡ‚ΡŒ ΡΠ»ΡƒΡ‡ΠΈΠ»Π°ΡΡŒ посрСди пСрСбазирования ΠΈΠ»ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎΠ³ΠΎ слияния, ΠΌΠΎΠΆΠ½ΠΎ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌΡƒ ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ git rebase --abort ΠΈΠ»ΠΈ git merge --abort.
  • Для подстраховки Π½Π΅ ΡΡ‚Π΅ΡΠ½ΡΠΉΡ‚Π΅ΡΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π²Π΅Ρ‚ΠΊΡƒ ΠΈΠ»ΠΈ Ρ‚Π΅Π³ Π² качСствС Β«Π·Π°ΠΊΠ»Π°Π΄ΠΊΠΈΒ» ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ «опасных» ΠΊΠΎΠΌΠ°Π½Π΄ Ρ‚ΠΈΠΏΠ° git rebase. К этой вСрсии ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ, Ссли Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ Π½Π΅ Ρ‚Π°ΠΊ.
  • ПослС выполнСния ΠΊΠΎΠΌΠ°Π½Π΄ Ρ‚ΠΈΠΏΠ° git rebase Π½Π΅ Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΈ Ρ„Π°ΠΉΠ»Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ соотвСтствуСт вашим оТиданиям.

ΠŸΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Π΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ

Π’ Git, разумССтся, Π³ΠΎΡ€Π°Π·Π΄ΠΎ большС слоТных ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ, Π½ΠΎ Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ стоит Π·Π½Π°Ρ‚ΡŒ ΠΎΠ± этих:

БостояниС Β«ΠΎΡ‚ΠΎΡ€Π²Π°Π½Π½ΠΎΠΉ Π³ΠΎΠ»ΠΎΠ²Ρ‹Β» (detached HEAD). Когда HEAD ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΊΡƒ Π²Π΅Ρ‚ΠΊΠΈ Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚. Однако, Ссли HEAD ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ΅, ΠΊΡ€ΠΎΠΌΠ΅ локальной Π²Π΅Ρ‚ΠΊΠΈ, Git Π½Π΅ смоТСт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ссылку Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚. Π’ этом случаС Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ окаТСтся Π² состоянии detached HEAD. Если Π²Ρ‹ создадитС Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ Π² этом состоянии, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ HEAD Π±ΡƒΠ΄Π΅Ρ‚ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° Π½Π΅Π³ΠΎ, ΠΈ Π½ΠΈΡ‡Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ΅: Ссли Π²Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ΡΡŒ Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ, Ρƒ вас большС Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ссылки Π½Π° этот ΠΊΠΎΠΌΠΌΠΈΡ‚.

Π’ состоянии detached HEAD ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ Π² Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π² это состояниС ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Ρ‚Π°ΠΊ:

  • Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git checkout <commit-hash>.
  • Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git checkout <remote>/<branch> для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ.
  • ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΠ²ΡˆΠΈΡΡŒ Π½Π° Π²Π΅Ρ‚ΠΊΡƒ, которая Π±Ρ‹Π»Π° ΡƒΠ΄Π°Π»Π΅Π½Π°.

Π’Ρ‹ΠΉΡ‚ΠΈ ΠΈΠ· detached HEAD ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ git checkout <branch-name>.

Π₯ΡƒΠΊΠΈ. Π­Ρ‚ΠΎ исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹ (Ρ‡Π°Ρ‰Π΅ всСго shell-скрипты), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Git запускаСт Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅ΠΌ. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΈΡ… для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΊΠΎΠ΄Π° ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠΌ (отмСняя ΠΊΠΎΠΌΠΌΠΈΡ‚ Π² случаС Π½Π΅ΡƒΠ΄Π°Ρ‡ΠΈ), создания ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сообщСний ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², Π° Ρ‚Π°ΠΊΠΆΠ΅ для запуска дСйствий Π½Π° сСрвСрС послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΊΡ‚ΠΎ-Ρ‚ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠ» измСнСния Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ (запуск сборки ΠΈ/ΠΈΠ»ΠΈ развСртывания).

Π Π΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ Π²Π°ΠΌ нСсколько часов Ρ€Π°Π±ΠΎΡ‚Ρ‹:

  • git bisect – ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ внСс ΠΎΡˆΠΈΠ±ΠΊΡƒ, ΠΏΡƒΡ‚Π΅ΠΌ тСстирования Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² (Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΈΠ»ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ сцСнариСв). ΠŸΡ€ΠΈ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ истории Ρ‚Π°ΠΊΡƒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, Π½ΠΎ послС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… слияний это становится Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ слоТнСС, ΠΈ ΠΊΠ°ΠΊ Ρ€Π°Π· Ρ‚ΡƒΡ‚ Π½Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ git bisect.
  • git filter-repo – замСняСт ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ filter-branch. ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ всю ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ рСпозитория для удалСния ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° ΠΈ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ Ρ‡Π°ΡΡ‚ΡŒ рСпозитория Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Если Π²Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Π²ΠΎ взаимодСйствиС описанных Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ, Π±ΡƒΠ΄Π΅Ρ‚ Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΠΏΡ€ΠΎΡ‰Π΅:

  • Π‘ΠΎΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Git с Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½Π° ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ ацикличСский Π³Ρ€Π°Ρ„ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ².
  • ΠŸΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ошибки (запустили merge Π² Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅? сдСлали rebase Π½Π° Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅?)

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, осмыслСниС этих ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… усилий, Π½ΠΎ ΠΎΠ½ΠΎ Ρ‚ΠΎΠ³ΠΎ стоит: доскональноС Π·Π½Π°Π½ΠΈΠ΅ Git обСспСчиваСт эффСктивноС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ своими рСпозиториями ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΡƒΡŽ ΠΊΠΎΠ»Π»Π°Π±ΠΎΡ€Π°Ρ†ΠΈΡŽ Π² совмСстных ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ….

***

ΠŸΡ€ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ использовалась публикация "How I teach Git".

Π›Π£Π§Π¨Π˜Π• БВАВЬИ ПО Π’Π•ΠœΠ•

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° программиста
18 октября 2017

Π¨ΠΏΠ°Ρ€Π³Π°Π»ΠΊΠ° ΠΏΠΎ Git, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ прСдставлСны основныС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹

Git сСгодня - это ΠΎΡ‡Π΅Π½ΡŒ популярная систСма контроля вСрсий. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΡˆΠΏΠ°Ρ€Π³Π°Π»...
admin
21 июня 2017

ΠŸΡ€ΠΎ Git, Github ΠΈ Gitflow простыми словами

НС самоС ΠΈΡΡ‡Π΅Ρ€ΠΏΡ‹Π²Π°ΡŽΡ‰Π΅Π΅, Π½ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ Π²ΠΏΠΎΠ»Π½Π΅ Π΄ΠΎΡ…ΠΎΠ΄Ρ‡ΠΈΠ²ΠΎΠ΅ руководство ΠΏΠΎ Git, Gith...
admin
23 фСвраля 2017

Git Π·Π° полчаса: руководство для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…

Π’ послСдниС Π³ΠΎΠ΄Ρ‹ ΠΏΠΎΠΏΡƒΠ»ΡΡ€Π½ΠΎΡΡ‚ΡŒ git дСмонстрируСт Π²Π·Ρ€Ρ‹Π²Π½ΠΎΠΉ рост. Π­Ρ‚Π° систСма ...