Π Π°Π·Π½ΠΎΠ΅

Soft git reset: —soft, —mixed(ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ), —hard / Π₯Π°Π±Ρ€

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

—soft, —mixed(ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ), —hard / Π₯Π°Π±Ρ€

К ΠΌΠΎΠ΅ΠΌΡƒ ΡƒΠ΄ΠΈΠ²Π»Π΅Π½ΠΈΡŽ Π½Π° Ρ†Π΅Π»ΠΎΠΌ Ρ…Π°Π±Ρ€Π°Ρ…Π°Π±Ρ€Π΅ Π½Π΅Ρ‚ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ поста Π³Π΄Π΅ Π±Ρ‹ Π±Ρ‹Π»ΠΎ понятно написано ΠΏΡ€ΠΎ 3 Π²ΠΈΠ΄Π° git reset. НапримСр, Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎ рСлСвантности ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΏΠΎ запросу Β«git resetΒ» Π°Π²Ρ‚ΠΎΡ€ ΠΏΠΈΡˆΠ΅Ρ‚ Ρ‡Ρ‚ΠΎ Β«Π΄Π°Π½Π½ΠΎΠ΅ дСйствиС ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π΄Π²ΡƒΡ… Π²ΠΈΠ΄ΠΎΠ²: мягкого(soft reset) ΠΈ ТСсткого(hard reset)Β». Π Π΅ΠΆΠΈΠΌ --mixed, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ-Ρ‚ΠΎ Π½Π΅ удостоился упоминания.

НичСго ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ часто видишь Π½Π΅ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ этой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. Под ΠΊΠ°Ρ‚ΠΎΠΌ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ ΠΈ ясно расскаТу ΠΎ всСх Ρ‚Ρ€Ρ‘Ρ… Ρ€Π΅ΠΆΠΈΠΌΠ°Ρ… git reset, послС прочтСния Ρ‚ΠΎΠΏΠΈΠΊΠ° нСясностСй ΠΎΡΡ‚Π°Ρ‚ΡŒΡΡ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ.


Π‘Π΄Π΅Π»Π°Π½Π½Ρ‹Π΅ измСнСния Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΠΌΠ΅ΡŽΡ‚ статус unstaged. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡ… Π·Π°ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΈΡ‚ΡŒ сначала Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ измСнСния Π² индСкс, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² git add. Когда Π²Ρ‹ Π΄Π΅Π»Π°Π΅Ρ‚Π΅ git commit, Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΊΠΎΠΌΠΌΠΈΡ‡Π΅Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π² индСксС.

git reset —soft

Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π²Π΅Ρ‚ΠΊΡƒ:
- A - B - C (master)
HEAD ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° C ΠΈ индСкс совпадаСт с C.

ПослС выполнСния

git reset --soft B

HEAD Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° B ΠΈ измСнСния ΠΈΠ· ΠΊΠΎΠΌΠΌΠΈΡ‚Π° C Π±ΡƒΠ΄ΡƒΡ‚ Π² индСксС, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ Π²Ρ‹ ΠΈΡ… Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ git add. Если Π²Ρ‹ сСйчас Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ git commit Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹ΠΉ C.

git reset —mixed (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ)

Π Π΅ΠΆΠΈΠΌ --mixed ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ρ‚.Π΅. git reset --mixed = git reset

ВСрнСмся ΠΊ Ρ‚Π΅ΠΌ ΠΆΠ΅ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌ условиям:
- A - B - C (master)

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ²

git reset --mixed B

ΠΈΠ»ΠΈ

git reset B

HEAD ΠΎΠΏΡΡ‚ΡŒ ΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° B, Π½ΠΎ Π½Π° этот Ρ€Π°Π· измСнСния ΠΈΠ· Π‘ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π² индСксС ΠΈ Ссли Π²Ρ‹ запуститС здСсь git commit Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ Ρ‚.ΠΊ. Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅Ρ‚ Π² индСксС. Π£ нас Π΅ΡΡ‚ΡŒ всС измСнСния ΠΈΠ· Π‘, Π½ΠΎ Ссли Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ git status Ρ‚ΠΎ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ всС измСнСния not staged. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡ… Π·Π°ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΈΡ‚ΡŒ Π½ΡƒΠΆΠ½ΠΎ сначала Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΈΡ… Π² индСкс ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ git add ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС этого git commit.

git reset —hard

Π’Π΅ ΠΆΠ΅ самыС Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ условия:
- A - B - C (master)

ПослСдний Ρ€Π΅ΠΆΠΈΠΌ --hard Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ --mixed пСрСмСстит HEAD Π½Π° Π’ ΠΈ очистит индСкс, Π½ΠΎ Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ --mixed ТСсткий reset ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ Ρ„Π°ΠΉΠ»Ρ‹ Π² вашСй Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ. Если Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ

git reset --hard B

Ρ‚ΠΎ измСнСния ΠΈΠ· Π‘, Ρ€Π°Π²Π½ΠΎ ΠΊΠ°ΠΊ ΠΈ Π½Π΅Π·Π°ΠΊΠΎΠΌΠΌΠΈΡ‡Π΅Π½Π½Ρ‹Π΅ измСнСния, Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹ ΠΈ Ρ„Π°ΠΉΠ»Ρ‹ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с B. Учитывая Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ этот Ρ€Π΅ΠΆΠΈΠΌ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ ΠΏΠΎΡ‚Π΅Ρ€ΡŽ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Π²Ρ‹ всСгда Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ git status ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ ΠΊΠ°ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ТСсткий reset Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Ρ‡Ρ‚ΠΎ Π½Π΅Ρ‚ Π½Π΅Π·Π°ΠΊΠΎΠΌΠΌΠΈΡ‡Π΅Π½Π½Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ(ΠΈΠ»ΠΈ ΠΎΠ½ΠΈ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹).

Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Ρ€Π΅ΠΆΠΈΠΌΠΎΠ² git reset:





мСняСт индСксмСняСт Ρ„Π°ΠΉΠ»Ρ‹

Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ
Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ

Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ
reset --softΠ½Π΅Ρ‚Π½Π΅Ρ‚Π½Π΅Ρ‚
reset [--mixed]Π΄Π°Π½Π΅Ρ‚Π½Π΅Ρ‚
reset --hardΠ΄Π°Π΄Π°Π΄Π°

Ну ΠΈ напослСдок ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΎΠΉ: (thx to VBauer)

Π“ΠΎΡ‚ΠΎΠ²ΠΈΠΌ git reset ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ / Π₯Π°Π±Ρ€

ΠžΡ‡Π΅Π½ΡŒ короткая Π·Π°ΠΌΠ΅Ρ‚ΠΊΠ° ΠΈΠ· сСрии Β«Π₯озяйкС Π½Π° Π·Π°ΠΌΠ΅Ρ‚ΠΊΡƒΒ».

ΠŸΡ€Π΅Π΄ΠΈΡΠ»ΠΎΠ²ΠΈΠ΅

Π£ ΠΏΠ»ΠΎΡ…ΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², Ρ‚ΠΈΠΏΠ° мСня, часто Ρ‚Π°ΠΊ Π±Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΠΈΡˆΡŒ всякого, Π° ΠΏΠΎΡ‚ΠΎΠΌ оказываСтся Ρ‡Ρ‚ΠΎ Π½Π΅ Ρ‚ΠΎ ΠΈ Π½Π΅ Ρ‚ΡƒΠ΄Π°, Π½ΠΎ git ΠΏΠΎΠΌΠ½ΠΈΡ‚ всё ΠΈ вСсь этот Ρ€Π°Π·Π³ΡƒΠ» Π°Π½Π°Ρ€Ρ…ΠΈΠΈ остаётся Π² истории.
МнС всСгда казалось Ρ‡Ρ‚ΠΎ это ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ, Π½ΠΎ сколько Ρ€Π°Π· я Π½Π΅ Π½Π°Ρ‡ΠΈΠ½Π°Π» ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚Π° Π½Π° этот вопрос β€” ΠΊΠ°ΠΊ Π² git ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΊΠ°ΠΌΠΈΡ‚Ρ‹ β€” ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π· ΠΌΠ½Π΅ это Π½Π΅ ΡƒΠ΄Π°Π²Π°Π»ΠΎΡΡŒ.
А всё ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΈ поиски ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠ»ΠΈ мСня ΠΊ rebase, Π° Π½Π°Π΄ΠΎ Π±Ρ‹Π»ΠΎ ΠΈΡΠΊΠ°Ρ‚ΡŒ reset.
На ΠΌΠΎΠΉ вкус вопрос нСдостаточно освСщён ΠΈ моя Π·Π°ΠΌΠ΅Ρ‚ΠΊΠ° ΠΏΡ€ΠΈΠ·Π²Π°Π½Π° Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ этот ΠΏΡ€ΠΎΠ±Π΅Π».

Алгоритм

  1. git status // провСряСм Ρ‡Ρ‚ΠΎ Ρƒ нас Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ вСрсия
  2. git log // ΠΈΡ‰Π΅ΠΌ ΠΊΠ°ΠΌΠΈΡ‚ ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΎΡ‚ΠΊΠ°Ρ‚ΠΈΡ‚ΡŒΡΡ
  3. sudo git reset —hard 7bcdf46b14b2dacc286b0ad469d5f9022d797f68 // ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠΈΡ‚ начиная с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π°ΠΌ Π½Π°Π΄ΠΎ Π·Π°Π±Ρ‹Ρ‚ΡŒ наши измСнСния, ΠΏΡ€ΠΈ этом ΠΈΠ· локальной Π²Π΅Ρ‚ΠΊΠΈ всС ΠΊΠ°ΠΌΠΈΡ‚Ρ‹ с ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°Π±Ρ‹Ρ‚Ρ‹ β€” ΡƒΠ΄Π°Π»Π΅Π½Ρ‹
  4. git push —force origin feature/draft // Π·Π°Π»ΠΈΠ²Π°Π΅ΠΌ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ Π² ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΡƒΡŽ (Π²Π΅Ρ‚ΠΊΡƒ сСрвСра) β€” ΠΈΠ· ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹ всС «лишниС» ΠΊΠ°ΠΌΠΈΡ‚Ρ‹
  5. ПобСда !

Если Π΅ΡΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ способ, Ρ‚ΠΎ ΠΏΡ€ΠΎΡˆΡƒ ΠΎΠ·Π²ΡƒΡ‡ΠΈΡ‚ΡŒ Π² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ….

PS

На самом Π΄Π΅Π»Π΅ ΠΊΠ°ΠΌΠΈΡ‚Ρ‹ ΠΈΠ· рСпозитория Π½Π΅ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ, удаляСтся связь этих ΠΊΠ°ΠΌΠΈΡ‚ΠΎΠ² с Π΄Π΅Ρ€Π΅Π²ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ эти ΠΊΠ°ΠΌΠΈΡ‚Ρ‹ ΠΏΡ€ΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ ΠΈΠ· Π²Π΅Ρ‚ΠΊΠΈ, Π½ΠΎ git ΠΏΠΎΠΌΠ½ΠΈΡ‚ всё.

PS2

Π‘ΠΎΠ»Π΅Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ способа Π½Π΅ нашлось ( Π²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΈ с rebase Π½Π΅ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ Π²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΈ ).

Но Ρƒ Ρ‚ΠΎΠ²Π°Ρ€ΠΈΡ‰Π΅ΠΉ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ Π² ΠΆΠΈΠ·Π½ΠΈ всё всСгда происходит ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ ΠΈ поэтому всСгда Π½Π°Π΄ΠΎ Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ СдинствСнным ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΊΡ€Ρ‹ΡˆΡƒ сорвало ΠΎΡ‚ Ρ‚Π°ΠΊΠΎΠ³ΠΎ вольго обращСния с Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅ΠΌ.

Π’ΠΎΠ²Π°Ρ€ΠΈΡ‰ΠΈ!

Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ свои инструмСнты ΠΈ свои ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΈΠ½ΠΎΠ³Π΄Π° ΠΈ git reset β€” Π³ΠΎΠ΄Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, особСнно ΠΊΠΎΠ³Π΄Π° Ρ‚Ρ‹ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΈ Ρ‚Ρ‹ Ρ…ΠΎΡ‡Π΅ΡˆΡŒ ΠΎΡ‚ΠΊΠ°Ρ‚ΠΈΡ‚ΡŒ ΠΊΠ°ΠΌΠΈΡ‚Ρ‹ Π·Π° послСдниС Π΄Π²Π° часа Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² своСй feature Π²Π΅Ρ‚ΠΊΠ΅.

git reset | Atlassian Git Tutorial

Команда git reset β€” это слоТный ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ инструмСнт для ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. Она ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Ρ€ΠΈ основныС Ρ„ΠΎΡ€ΠΌΡ‹ Π²Ρ‹Π·ΠΎΠ²Π°, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки --soft, --mixed, --hard. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· этих Ρ‚Ρ€Π΅Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² соотвСтствуСт Ρ‚Ρ€Π΅ΠΌ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°ΠΌ управлСния состояниСм Git: Π΄Π΅Ρ€Π΅Π²Ρƒ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² (HEAD), Ρ€Π°Π·Π΄Π΅Π»Ρƒ проиндСксированных Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌΡƒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Ρƒ.

Git reset ΠΈ Ρ‚Ρ€ΠΈ Π΄Π΅Ρ€Π΅Π²Π° Git

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° git reset, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ с Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌΠΈ систСмами управлСния состояниСм Π² Git. Иногда эти ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ «трСмя Π΄Π΅Ρ€Π΅Π²ΡŒΡΠΌΠΈΒ» Git. Β«Π”Π΅Ρ€Π΅Π²ΡŒΡΒ» β€” Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π΅ самоС Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это Π½Π΅ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Π΄Ρ€Π΅Π²ΠΎΠ²ΠΈΠ΄Π½Ρ‹Π΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… Π² строгом смыслС слова. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ это структуры Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° основС ΡƒΠ·Π»ΠΎΠ² ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Git ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ для отслСТивания истории внСсСния ΠΏΡ€Π°Π²ΠΎΠΊ. Π›ΡƒΡ‡ΡˆΠΈΠΉ способ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ эти ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ β€” ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½Π°Π±ΠΎΡ€ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΠΈ ΠΏΡ€ΠΎΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΏΠΎ Ρ‚Ρ€Π΅ΠΌ Π΄Π΅Ρ€Π΅Π²ΡŒΡΠΌ.

НачнСм Ρ€Π°Π±ΠΎΡ‚Ρƒ с создания Π½ΠΎΠ²ΠΎΠ³ΠΎ рСпозитория с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π½ΠΈΠΆΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄.

 $ mkdir git_reset_test $ cd git_reset_test/ $ git init . Initialized empty Git repository in /git_reset_test/.git/ $ touch reset_lifecycle_file $ git add reset_lifecycle_file $ git commit -m"initial commit" [master (root-commit) d386d86] initial commit 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 reset_lifecycle_file

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° создаСт Π½ΠΎΠ²Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Git с ΠΎΠ΄Π½ΠΈΠΌ пустым Ρ„Π°ΠΉΠ»ΠΎΠΌ reset_lifecycle_file. На этом этапС Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠΌΠΌΠΈΡ‚ (d386d86), Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° reset_lifecycle_file.

Π Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³

ΠŸΠ΅Ρ€Π²ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ рассмотрим, β€” Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³. Π­Ρ‚ΠΎ Π΄Π΅Ρ€Π΅Π²ΠΎ синхронизировано с локальной Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмой ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ нСпосрСдствСнныС измСнСния, внСсСнныС Π² содСрТимоС Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ².


$ echo 'hello git reset' > reset_lifecycle_file
$ git statusΒ 
On branch masterΒ 
Changes not staged for commit:Β 
(use "git add ..." to update what will be committed)Β 
(use "git checkout -- ..." to discard changes in working directory)Β 
modified: reset_lifecycle_file

Π’ нашСм дСмонстрационном Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ содСрТимоС Π² Ρ„Π°ΠΉΠ» reset_lifecycle_file. Π’Ρ‹Π·ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git status ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Git Π·Π½Π°Π΅Ρ‚ ΠΎΠ± измСнСниях Π² этом Ρ„Π°ΠΉΠ»Π΅. Π’ настоящий ΠΌΠΎΠΌΠ΅Π½Ρ‚ эти измСнСния ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π΄Π΅Ρ€Π΅Π²Π°, Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°. ΠšΠΎΠΌΠ°Π½Π΄Ρƒ git status ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для отобраТСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅. Π˜Π·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ красным Ρ†Π²Π΅Ρ‚ΠΎΠΌ с прСфиксом Β«modifiedΒ».

Π Π°Π·Π΄Π΅Π» проиндСксированных Ρ„Π°ΠΉΠ»ΠΎΠ²

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Π΄Π΅Ρ€Π΅Π²ΠΎ β€” Ρ€Π°Π·Π΄Π΅Π» проиндСксированных Ρ„Π°ΠΉΠ»ΠΎΠ². Π­Ρ‚ΠΎ Π΄Π΅Ρ€Π΅Π²ΠΎ отслСТиваСт измСнСния Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git add, для сохранСния Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅. Π­Ρ‚ΠΎ Π΄Π΅Ρ€Π΅Π²ΠΎ прСдставляСт собой слоТный Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ. Π’ Ρ†Π΅Π»ΠΎΠΌ Git пытаСтся ΡΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ подробности Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€Π°Π·Π΄Π΅Π»Π° проиндСксированных Ρ„Π°ΠΉΠ»ΠΎΠ².

Для ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ просмотра состояния Ρ€Π°Π·Π΄Π΅Π»Π° проиндСксированных Ρ„Π°ΠΉΠ»ΠΎΠ² Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Π½Π΅Π΅ ΠΈΠ·Π²Π΅ΡΡ‚Π½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Git β€” git ls-files. Команда git ls-files ΠΏΠΎ сути являСтся ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΎΠΉ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ состояния Π΄Π΅Ρ€Π΅Π²Π° Ρ€Π°Π·Π΄Π΅Π»Π° проиндСксированных Ρ„Π°ΠΉΠ»ΠΎΠ².

 git ls-files -s 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 reset_lifecycle_file

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git ls-files с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ -s (ΠΈΠ»ΠΈ --stage). Π‘Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° -s Π²Ρ‹Π²ΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git ls-files прСдставляСт собой просто список ΠΏΡƒΡ‚Π΅ΠΉ ΠΈ ΠΈΠΌΠ΅Π½ Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² настоящСС врСмя ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ индСкса. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ -s ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ², находящихся Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ проиндСксированных Ρ„Π°ΠΉΠ»ΠΎΠ². Π­Ρ‚ΠΈ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ β€” Π±ΠΈΡ‚Ρ‹ Ρ€Π΅ΠΆΠΈΠΌΠ° проиндСксированного ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°, имя ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ Π½ΠΎΠΌΠ΅Ρ€ Π² индСксС. Π—Π΄Π΅ΡΡŒ нас интСрСсуСт Π²Ρ‚ΠΎΡ€ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, имя ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (d7d77c1b04b5edd5acfc85de0b592449e5303770). Π­Ρ‚ΠΎ стандартный Ρ…Π΅Ρˆ SHA-1 ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Git, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ собой Ρ…Π΅Ρˆ содСрТимого Ρ„Π°ΠΉΠ»ΠΎΠ². Π’ истории ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² хранятся собствСнныС SHA ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² для ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΠΈ ссылки, Π° Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ проиндСксированных Ρ„Π°ΠΉΠ»ΠΎΠ² Π΅ΡΡ‚ΡŒ свои SHA ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² для отслСТивания вСрсий Ρ„Π°ΠΉΠ»ΠΎΠ² Π² индСксС.

Π”Π°Π»Π΅Π΅ ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» reset_lifecycle_file Π² Ρ€Π°Π·Π΄Π΅Π» проиндСксированных Ρ„Π°ΠΉΠ»ΠΎΠ².


$ git add reset_lifecycle_fileΒ 

$ git statusΒ 

On branch master Changes to be committed:Β 

(use "git reset HEAD ..." to unstage)Β 

modified: reset_lifecycle_file

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git add reset_lifecycle_file, которая добавляСт Ρ„Π°ΠΉΠ» Π² Ρ€Π°Π·Π΄Π΅Π» проиндСксированных Ρ„Π°ΠΉΠ»ΠΎΠ². Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git status Ρ„Π°ΠΉΠ» reset_lifecycle_file отобраТаСтся Π·Π΅Π»Π΅Π½Ρ‹ΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ ΠΊΠ°ΠΊ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅, ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°Ρ‰Π΅Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρƒ (Β«Changes to be committedΒ»). Π’Π°ΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° git status Π½Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ истинноС прСдставлСниС Ρ€Π°Π·Π΄Π΅Π»Π° проиндСксированных Ρ„Π°ΠΉΠ»ΠΎΠ². Π’Ρ‹Π²ΠΎΠ΄ git status ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ различия ΠΌΠ΅ΠΆΠ΄Ρƒ историСй ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² ΠΈ Ρ€Π°Π·Π΄Π΅Π»ΠΎΠΌ проиндСксированных Ρ„Π°ΠΉΠ»ΠΎΠ². Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим содСрТимоС Ρ€Π°Π·Π΄Π΅Π»Π° проиндСксированных Ρ„Π°ΠΉΠ»ΠΎΠ² Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚.

 $ git ls-files -s 100644 d7d77c1b04b5edd5acfc85de0b592449e5303770 0 reset_lifecycle_file

Π’ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ SHA ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° для Ρ„Π°ΠΉΠ»Π° reset_lifecycle_file измСнился с e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 Π½Π° d7d77c1b04b5edd5acfc85de0b592449e5303770.

Π˜ΡΡ‚ΠΎΡ€ΠΈΡ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ²

ПослСднСС Π΄Π΅Ρ€Π΅Π²ΠΎ β€” история ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ². Команда git commit добавляСт измСнСния Π² постоянный снимок, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ находится Π² истории ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ². Π­Ρ‚ΠΎΡ‚ снимок Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ состояниС Ρ€Π°Π·Π΄Π΅Π»Π° проиндСксированных Ρ„Π°ΠΉΠ»ΠΎΠ² Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ выполнСния ΠΊΠΎΠΌΠΌΠΈΡ‚Π°.

 $ git commit -am"update content of reset_lifecycle_file" [master dc67808] update content of reset_lifecycle_file 1 file changed, 1 insertion(+) $ git status On branch master nothing to commit, working tree clean

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ создали Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ с ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅ΠΌ Β«update content of resetlifecyclefileΒ». Π’ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π±Ρ‹Π» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π½Π°Π±ΠΎΡ€ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. Π’Ρ‹Π·ΠΎΠ² git status Π² этой Ρ‚ΠΎΡ‡ΠΊΠ΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ Π΄Π΅Ρ€Π΅Π²Π΅ Π½Π΅Ρ‚ ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git log ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ Π΄Π΅Ρ€Π΅Π²ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ². Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ прослСдили Π·Π° этим Π½Π°Π±ΠΎΡ€ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π²ΠΎ всСх Ρ‚Ρ€Π΅Ρ… Π΄Π΅Ρ€Π΅Π²ΡŒΡΡ…, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ ΠΊ использованию ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git reset.

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

На ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд, ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git reset сходно с ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git checkout. Но ΠΊΠΎΠΌΠ°Π½Π΄Π° git checkout Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ с ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ HEAD, Π° git reset ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ HEAD ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠΈ. Π§Ρ‚ΠΎΠ±Ρ‹ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ продСмонстрирована ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π² Π²Π΅Ρ‚ΠΊΠ΅ master. Π’ настоящСС врСмя ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ HEAD ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π²Π΅Ρ‚ΠΊΡƒ master ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° ΠΊΠΎΠΌΠΌΠΈΡ‚ d. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ ΠΎΠ±Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, git checkout b ΠΈ git reset b., ΠΈ сравним Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

git checkout b

ПослС выполнСния ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git checkout ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ master ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ссылаСтся Π½Π° ΠΊΠΎΠΌΠΌΠΈΡ‚ d. Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ HEAD Π±Ρ‹Π» ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ссылаСтся Π½Π° ΠΊΠΎΠΌΠΌΠΈΡ‚ b. Π’ настоящий ΠΌΠΎΠΌΠ΅Π½Ρ‚ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ находится Π² состоянии ΠΎΡ‚ΠΊΡ€Π΅ΠΏΠ»Π΅Π½Π½ΠΎΠ³ΠΎ указатСля HEAD.

git reset b

Команда git reset ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ HEAD, ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π²Π΅Ρ‚ΠΊΠΈ Π½Π° Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚.

Помимо обновлСния ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° ΠΊΠΎΠΌΠΌΠΈΡ‚, ΠΊΠΎΠΌΠ°Π½Π΄Π° git reset измСняСт состояниС Ρ‚Ρ€Π΅Ρ… Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π². Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ссылки мСняСтся всСгда, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ происходит ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ Π΄Π΅Ρ€Π΅Π²Π°, Π΄Π΅Ρ€Π΅Π²Π° ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ². АргумСнты ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки --soft, --mixed ΠΈ --hard ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚, ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΄Π΅Ρ€Π΅Π²ΡŒΡ Ρ€Π°Π·Π΄Π΅Π»Π° проиндСксированных Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git reset ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ скрытыС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ --mixed ΠΈ HEAD. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git reset эквивалСнтно Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git reset --mixed HEAD. Π’ этом случаС HEAD являСтся ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚. ВмСсто HEAD ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ любой Ρ…Π΅Ρˆ SHA-1 ΠΊΠΎΠΌΠΌΠΈΡ‚Π° Git.

—hard

Π­Ρ‚ΠΎ самый прямой, ΠžΠŸΠΠ‘ΠΠ«Π™ ΠΈ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€. ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° --hard ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π² истории ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‚ΡΡ Π½Π° ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚. Π—Π°Ρ‚Π΅ΠΌ происходит сброс Ρ€Π°Π·Π΄Π΅Π»Π° проиндСксированных Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Π΄ΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°. ВсС ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΠ΅ измСнСния Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ проиндСксированных Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ ΡΠ±Ρ€Π°ΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² соотвСтствии с состояниСм Π΄Π΅Ρ€Π΅Π²Π° ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ². Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ любая Ρ€Π°Π±ΠΎΡ‚Π°, Π½Π°Ρ…ΠΎΠ΄ΠΈΠ²ΡˆΠ°ΡΡΡ Π² состоянии оТидания Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ проиндСксированных Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, Π±ΡƒΠ΄Π΅Ρ‚ потСряна.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это, ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ, созданном Ρ€Π°Π½Π΅Π΅ для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° с трСмя Π΄Π΅Ρ€Π΅Π²ΡŒΡΠΌΠΈ. Π‘Π½Π°Ρ‡Π°Π»Π° внСсСм Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ измСнСния. Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

$ echo 'new file content' > new_file $ git add new_file $ echo 'changed content' >> reset_lifecycle_file

Π­Ρ‚ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ создали Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ new_file ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π΅Π³ΠΎ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π±Ρ‹Π»ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ содСрТимоС Ρ„Π°ΠΉΠ»Π° reset_lifecycle_file. А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git status ΠΈ посмотрим, ΠΊΠ°ΠΊ эти измСнСния повлияли Π½Π° состояниС рСпозитория.

$ git status On branch master Changes to be committed: (use "git reset HEAD ..." to unstage) new file: new_file Changes not staged for commit: (use "git add ..." to update what will be committed) (use "git checkout -- ..." to discard changes in working directory) modified: reset_lifecycle_file

ΠœΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ появились ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΠ΅ измСнСния: Π² Π΄Π΅Ρ€Π΅Π²Π΅ Ρ€Π°Π·Π΄Π΅Π»Π° проиндСксированных Ρ„Π°ΠΉΠ»ΠΎΠ² β€” Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° new_file, Π° Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ β€” ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° reset_lifecycle_file.

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ дальшС, ΠΈΠ·ΡƒΡ‡ΠΈΠΌ состояниС Ρ€Π°Π·Π΄Π΅Π»Π° проиндСксированных Ρ„Π°ΠΉΠ»ΠΎΠ²:

$ git ls-files -s 100644 8e66654a5477b1bf4765946147c49509a431f963 0 new_file 100644 d7d77c1b04b5edd5acfc85de0b592449e5303770 0 reset_lifecycle_file

ΠœΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ» new_file Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π² индСкс. ΠœΡ‹ внСсли измСнСния Π² Ρ„Π°ΠΉΠ» reset_lifecycle_file, Π½ΠΎ Π΅Π³ΠΎ SHA Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ проиндСксированных Ρ„Π°ΠΉΠ»ΠΎΠ² (d7d77c1b04b5edd5acfc85de0b592449e5303770) остался ΠΏΡ€Π΅ΠΆΠ½ΠΈΠΌ. Π­Ρ‚ΠΎ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ Π½Π΅ использовали ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git add для добавлСния этих ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Ρ€Π°Π·Π΄Π΅Π» проиндСксированных Ρ„Π°ΠΉΠ»ΠΎΠ². Π­Ρ‚ΠΈ измСнСния ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈ Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git reset --hard ΠΈ ΠΈΠ·ΡƒΡ‡ΠΈΠΌ Π½ΠΎΠ²ΠΎΠ΅ состояниС рСпозитория.

$ git reset --hard HEAD is now at dc67808 update content of reset_lifecycle_file $ git status On branch master nothing to commit, working tree clean $ git ls-files -s 100644 d7d77c1b04b5edd5acfc85de0b592449e5303770 0 reset_lifecycle_file

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ «ТСсткий сброс» с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° --hard. Π’Ρ‹Π²ΠΎΠ΄ Git сообщаСт, Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ HEAD ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° послСдний ΠΊΠΎΠΌΠΌΠΈΡ‚, dc67808. Π”Π°Π»Π΅Π΅ провСряСм состояниС рСпозитория с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git status. Git сообщаСт, Ρ‡Ρ‚ΠΎ ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π½Π΅Ρ‚. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ состояниС Ρ€Π°Π·Π΄Π΅Π»Π° проиндСксированных Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π±Ρ‹Π» ΡΠ±Ρ€ΠΎΡˆΠ΅Π½ ΠΊ ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ, ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΠΎΠ²Π°Π²ΡˆΠ΅ΠΌΡƒ добавлСнию Ρ„Π°ΠΉΠ»Π° new_file. ИзмСнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ внСсли Π² Ρ„Π°ΠΉΠ» reset_lifecycle_file, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» new_file ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½Ρ‹. Π’Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ: Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ эти потСрянныС Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.

—mixed

Π­Ρ‚ΠΎ Ρ€Π΅ΠΆΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ссылок ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‚ΡΡ. Π Π°Π·Π΄Π΅Π» проиндСксированных Ρ„Π°ΠΉΠ»ΠΎΠ² сбрасываСтся Π΄ΠΎ состояния ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°. Π›ΡŽΠ±Ρ‹Π΅ измСнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ ΠΎΡ‚ΠΌΠ΅Π½Π΅Π½Ρ‹ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ проиндСксированных Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ.

$ echo 'new file content' > new_file $ git add new_file $ echo 'append content' >> reset_lifecycle_file $ git add reset_lifecycle_file $ git status On branch master Changes to be committed: (use "git reset HEAD ..." to unstage) new file: new_file modified: reset_lifecycle_file $ git ls-files -s 100644 8e66654a5477b1bf4765946147c49509a431f963 0 new_file 100644 7ab362db063f9e9426901092c00a3394b4bec53d 0 reset_lifecycle_file

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ внСсли Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ измСнСния: Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Ρ„Π°ΠΉΠ» new_file ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ содСрТимоС Ρ„Π°ΠΉΠ»Π° reset_lifecycle_file. Π—Π°Ρ‚Π΅ΠΌ эти измСнСния Π±Ρ‹Π»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π² Ρ€Π°Π·Π΄Π΅Π» проиндСксированных Ρ„Π°ΠΉΠ»ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git add. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ reset ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΡŽ Π² Π΄Π°Π½Π½ΠΎΠΌ состоянии.

$ git reset --mixed $ git status On branch master Changes not staged for commit: (use "git add ..." to update what will be committed) (use "git checkout -- ..." to discard changes in working directory) modified: reset_lifecycle_file Untracked files: (use "git add ..." to include in what will be committed) new_file no changes added to commit (use "git add" and/or "git commit -a") $ git ls-files -s 100644 d7d77c1b04b5edd5acfc85de0b592449e5303770 0 reset_lifecycle_file

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΌΡ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ Β«ΡΠΌΠ΅ΡˆΠ°Π½Π½Ρ‹ΠΉ сброс». НапоминаСм, Ρ‡Ρ‚ΠΎ --mixed являСтся Ρ€Π΅ΠΆΠΈΠΌΠΎΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git reset ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠΌΡƒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ. ΠŸΡ€ΠΈ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΊΠΎΠΌΠ°Π½Π΄ git status ΠΈ git ls-files становится Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Π΄Π΅Π» проиндСксированных Ρ„Π°ΠΉΠ»ΠΎΠ² Π±Ρ‹Π» ΡΠ±Ρ€ΠΎΡˆΠ΅Π½ Π΄ΠΎ состояния, ΠΊΠΎΠ³Π΄Π° Π² этом Ρ€Π°Π·Π΄Π΅Π»Π΅ находился Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ„Π°ΠΉΠ» reset_lifecycle_file. SHA ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° для Ρ„Π°ΠΉΠ»Π° reset_lifecycle_file Π±Ρ‹Π» ΡΠ±Ρ€ΠΎΡˆΠ΅Π½ ΠΊ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ вСрсии.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΊΠΎΠΌΠ°Π½Π΄Π° git status ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π°ΠΌ, Ρ‡Ρ‚ΠΎ появились измСнСния Π² Ρ„Π°ΠΉΠ»Π΅ reset_lifecycle_file ΠΈ сущСствуСт нСотслСТиваСмый Ρ„Π°ΠΉΠ» new_file. Π­Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ явного указания ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° --mixed. Π Π°Π·Π΄Π΅Π» проиндСксированных Ρ„Π°ΠΉΠ»ΠΎΠ² Π±Ρ‹Π» ΡΠ±Ρ€ΠΎΡˆΠ΅Π½, Π° ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΠ΅ измСнСния Π±Ρ‹Π»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½Ρ‹ Π² Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³. Для сравнСния, ΠΏΡ€ΠΈ использовании ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° --hard Π±Ρ‹Π»ΠΈ ΡΠ±Ρ€ΠΎΡˆΠ΅Π½Ρ‹ ΠΈ Ρ€Π°Π·Π΄Π΅Π» проиндСксированных Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΈ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π»ΠΎ ΠΊ ΠΏΠΎΡ‚Π΅Ρ€Π΅ этих ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ.

—soft

ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° --soft выполняСтся ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΈ Π½Π° этом опСрация сброса останавливаСтся. Π Π°Π·Π΄Π΅Π» проиндСксированных Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ. Π§Π΅Ρ‚ΠΊΠΎ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ довольно слоТно. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с нашим дСмонстрационным Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅ΠΌ ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΠΌ Π΅Π³ΠΎ ΠΊ мягкому сбросу.


$ git add reset_lifecycle_fileΒ 

$ git ls-files -sΒ 

100644 67cc52710639e5da6b515416fd779d0741e3762e 0 reset_lifecycle_fileΒ 

$ git statusΒ 

On branch masterΒ 

Changes to be committed:Β 

(use "git reset HEAD ..." to unstage)Β 

modified: reset_lifecycle_fileΒ 

Untracked files:Β 

(use "git add ..." to include in what will be committed)Β 

new_file

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ снова воспользовались ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ git add, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» reset_lifecycle_file Π² Ρ€Π°Π·Π΄Π΅Π» проиндСксированных Ρ„Π°ΠΉΠ»ΠΎΠ². Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ индСкс ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½, посмотрим Π½Π° Π²Ρ‹Π²ΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git ls-files. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π² Π²Ρ‹Π²ΠΎΠ΄Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git status строка Β«Changes to be committedΒ» ΠΎΠΊΡ€Π°ΡˆΠ΅Π½Π° Π² Π·Π΅Π»Π΅Π½Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚. Π€Π°ΠΉΠ» new_file ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° находится Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ ΠΊΠ°ΠΊ нСотслСТиваСмый. Π£Π΄Π°Π»ΠΈΠΌ Π΅Π³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ простой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ rm new_file, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠΎΠ½ Π½Π°ΠΌ большС Π½Π΅ понадобится.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ мягко сбросим Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС рСпозитория.

 $ git reset --soft $ git status On branch master Changes to be committed: (use "git reset HEAD ..." to unstage) modified: reset_lifecycle_file $ git ls-files -s 100644 67cc52710639e5da6b515416fd779d0741e3762e 0 reset_lifecycle_file

ΠœΡ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ «мягкий сброс». Π˜Π·ΡƒΡ‡Π΅Π½ΠΈΠ΅ состояния рСпозитория с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄ git status ΠΈ git ls-files ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ измСнилось. Π­Ρ‚ΠΎ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Мягкий сброс влияСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ². По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Π° git reset вызываСтся с использованиСм HEAD Π² качСствС Ρ†Π΅Π»Π΅Π²ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ наша история ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² ΡƒΠΆΠ΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π»Π° Π½Π° HEAD ΠΈ ΠΌΡ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ нСявный сброс Π΄ΠΎ HEAD, Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ.

Для получСния Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ прСдставлСния ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ --soft ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ Π΅Π³ΠΎ использования Π½Π°ΠΌ потрСбуСтся Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚, ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΎΡ‚ HEAD. Π£ нас ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ» reset_lifecycle_file, находящийся Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ проиндСксированных Ρ„Π°ΠΉΠ»ΠΎΠ². Π”Π°Π²Π°ΠΉΡ‚Π΅ создадим Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚.

$ git commit -m"prepend content to reset_lifecycle_file"

На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π² нашСм Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ находится Ρ‚Ρ€ΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°. ΠœΡ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρƒ. Для этого Π½Π°ΠΌ потрСбуСтся ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°. Π•Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ, просмотрСв Π²Ρ‹Π²ΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git log.

$ git log commit 62e793f6941c7e0d4ad9a1345a175fe8f45cb9df Author: bitbucket  Date: Fri Dec 1 15:03:07 2017 -0800 prepend content to reset_lifecycle_file commit dc67808a6da9f0dec51ed16d3d8823f28e1a72a Author: bitbucket  Date: Fri Dec 1 10:21:57 2017 -0800 update content of reset_lifecycle_file commit 780411da3b47117270c0e3a8d5dcfd11d28d04a4 Author: bitbucket  Date: Thu Nov 30 16:50:39 2017 -0800 initial commit

ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Π² истории ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ систСмы. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Π½Π° вашСй машинС. Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰Π΅Π³ΠΎ нас ΠΊΠΎΠΌΠΌΠΈΡ‚Π° для этого ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° β€” 780411da3b47117270c0e3a8d5dcfd11d28d04a4. Π­Ρ‚ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠΌΡƒ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρƒ Β«initial commitΒ». Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΡƒΠΊΠ°ΠΆΠ΅ΠΌ Π΅Π³ΠΎ Π² качСствС Ρ†Π΅Π»Π΅Π²ΠΎΠ³ΠΎ для нашСй ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ мягкого сброса.

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ Π½Π°Π·Π°Π΄ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС рСпозитория.

 $ git status && git ls-files -s On branch master nothing to commit, working tree clean 100644 67cc52710639e5da6b515416fd779d0741e3762e 0 reset_lifecycle_file

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ ΡΠΎΡΡ‚Π°Π²Π½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, ΡΠΎΡΡ‚ΠΎΡΡ‰ΡƒΡŽ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄ git status ΠΈ git ls-files -s. Она ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ Π΅ΡΡ‚ΡŒ ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΠ΅ измСнСния, Π° Ρ„Π°ΠΉΠ» reset_lifecycle_file Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ проиндСксированных Ρ„Π°ΠΉΠ»ΠΎΠ² находится Π² вСрсии 67cc52710639e5da6b515416fd779d0741e3762e. Π”Π΅Ρ€ΠΆΠ° Π² ΡƒΠΌΠ΅ эти свСдСния, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ мягкий сброс Π΄ΠΎ нашСго ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°.

$git reset --soft 780411da3b47117270c0e3a8d5dcfd11d28d04a4 $ git status && git ls-files -s On branch master Changes to be committed: (use "git reset HEAD ..." to unstage) modified: reset_lifecycle_file 100644 67cc52710639e5da6b515416fd779d0741e3762e 0 reset_lifecycle_file

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄ выполняСт «мягкий сброс», Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΡΠΎΡΡ‚Π°Π²Π½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, которая Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git status ΠΈ git ls-files ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ состоянии рСпозитория. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ эту ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ нСсколько интСрСсных наблюдСний. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, git status ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Ρ„Π°ΠΉΠ»Π΅ reset_lifecycle_file ΠΈ сообщаСт, Ρ‡Ρ‚ΠΎ эти измСнСния проиндСксированы для выполнСния ΠΊΠΎΠΌΠΌΠΈΡ‚Π°. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ git ls-files ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Π΄Π΅Π» проиндСксированных Ρ„Π°ΠΉΠ»ΠΎΠ² Π½Π΅ измСнился ΠΈ SHA остался ΠΏΡ€Π΅ΠΆΠ½ΠΈΠΌ: 67cc52710639e5da6b515416fd779d0741e3762e.

Π§Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ ΠΏΡ€ΠΈ этом сбросС, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git log:

$ git log commit 780411da3b47117270c0e3a8d5dcfd11d28d04a4 Author: bitbucket  Date: Thu Nov 30 16:50:39 2017 -0800 initial commit

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹Π²ΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ log ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π² истории ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² находится СдинствСнный ΠΊΠΎΠΌΠΌΠΈΡ‚. Π­Ρ‚ΠΎ Ρ‡Π΅Ρ‚ΠΊΠΎ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ --soft. Как ΠΈ ΠΏΡ€ΠΈ всСх Π²Ρ‹Π·ΠΎΠ²Π°Ρ… ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git reset, сначала происходит сброс Π΄Π΅Ρ€Π΅Π²Π° ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ². Наши ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ --hard ΠΈ --mixed воздСйствовали Π½Π° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ HEAD ΠΈ Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π»ΠΈ Π΄Π΅Ρ€Π΅Π²ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π΅ состояниС. Π’ΠΎ врСмя мягкого сброса происходит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сброс Π΄Π΅Ρ€Π΅Π²Π° ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ².

Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ±ΠΈΠ²Π°Ρ‚ΡŒ с Ρ‚ΠΎΠ»ΠΊΡƒ: ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΊΠΎΠΌΠ°Π½Π΄Π° git status сообщаСт ΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²? ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ --soft Π½Π΅ Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π·Π΄Π΅Π» проиндСксированных Ρ„Π°ΠΉΠ»ΠΎΠ², поэтому измСнСния Π² этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π² истории ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ². Π’ этом ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, просмотрСв Π²Ρ‹Π²ΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git ls-files -s, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ, Ρ‡Ρ‚ΠΎ SHA для Ρ„Π°ΠΉΠ»Π° reset_lifecycle_file остаСтся Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ΠΌ. Напомним, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° git status Π½Π΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ состояниС Β«Ρ‚Ρ€Π΅Ρ… Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π²Β», ΠΎΠ½Π° ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ различия ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ. Π’ этом случаС ΠΎΠ½Π° ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ измСнСния Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ проиндСксированных Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΎΠΏΠ΅Ρ€Π΅ΠΆΠ°ΡŽΡ‚ измСнСния Π² истории ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², ΠΊΠ°ΠΊ Ссли Π±Ρ‹ ΠΌΡ‹ ΡƒΠΆΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΈΡ… Π² индСкс.

Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ git reset ΠΈ git revert

Если git revert β€” «бСзопасный» способ ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Ρ‚ΠΎ git reset β€” опасный. ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git reset Π΅ΡΡ‚ΡŒ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ риск ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒ Π½Π°Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Git reset Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ удаляСт ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΈΡ… Π±Π΅Π· родитСля, Ρ‚. Π΅. ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ потСряСт прямой ΠΏΡƒΡ‚ΡŒ для доступа ΠΊ Π½ΠΈΠΌ. Π’Π°ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π±Π΅Π· родитСля ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΈ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git reflog. ПослС запуска Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ «сборщика мусора» Git навсСгда ΡƒΠ΄Π°Π»ΠΈΡ‚ всС ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π±Π΅Π· родитСля. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Git запускаСт этот «сборщик мусора» ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ 30 Π΄Π½Π΅ΠΉ. Π˜ΡΡ‚ΠΎΡ€ΠΈΡ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² β€” ΠΎΠ΄Π½ΠΎ ΠΈΠ· Β«Ρ‚Ρ€Π΅Ρ… Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π² GitΒ»; Π΄Π²Π° ΠΎΡΡ‚Π°Π²ΡˆΠΈΡ…ΡΡ β€” Ρ€Π°Π·Π΄Π΅Π» проиндСксированных Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ β€” Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹. ΠŸΡ€ΠΈ использовании этого инструмСнта Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ±Π»ΡŽΠ΄Π°Ρ‚ΡŒ ΠΎΡΡ‚ΠΎΡ€ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это ΠΎΠ΄Π½Π° ΠΈΠ· Π½Π΅ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄ Git, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ привСсти ΠΊ ΠΏΠΎΡ‚Π΅Ρ€Π΅ Π²Π°ΡˆΠΈΡ… Π½Π°Ρ€Π°Π±ΠΎΡ‚ΠΎΠΊ.

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

НС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ reset Π² ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠΉ истории

Никогда Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git reset , Ссли послС этого Π² ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Π±Ρ‹Π»ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½Ρ‹ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ снимки состояния. ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΌΠΈΡ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½, Π½Π° Π½Π΅Π³ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ.

ΠŸΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°, послС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‡Π»Π΅Π½Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠ»ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρƒ, ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Когда ΠΊΠΎΠ»Π»Π΅Π³ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ с вашим Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅ΠΌ, кусок истории ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π±ΡƒΠ΄Π΅Ρ‚ просто ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ. На схСмС Π²Π½ΠΈΠ·Ρƒ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, Ρ‡Ρ‚ΠΎ происходит ΠΏΡ€ΠΈ использовании ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ reset для ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°. Π’Π΅Ρ‚ΠΊΠ° origin/master являСтся вСрсиСй вашСй локальной Π²Π΅Ρ‚ΠΊΠΈ master Π² Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ.

Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ послС выполнСния ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ reset, Git Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ваша локальная история ΠΎΡ‚ΠΊΠ»ΠΎΠ½ΠΈΠ»Π°ΡΡŒ ΠΎΡ‚ Π²Π΅Ρ‚ΠΊΠΈ origin/master, Π° ΠΊΠΎΠΌΠΌΠΈΡ‚ слияния, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ для синхронизации Π²Π°ΡˆΠΈΡ… Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π², скорСС всСго, ΡΠΎΠ±ΡŒΠ΅Ρ‚ с Ρ‚ΠΎΠ»ΠΊΡƒ Π²Π°ΡˆΡƒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΈ ΠΏΠΎΠΌΠ΅ΡˆΠ°Π΅Ρ‚ Π΅ΠΉ.

ΠšΠΎΠΌΠ°Π½Π΄Ρƒ git reset ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… экспСримСнтов, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ пошло Π½Π΅ Ρ‚Π°ΠΊ, Π° Π½Π΅ для ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. Если Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚, Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½ΠΎΠΉ для этой Ρ†Π΅Π»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ git revert.

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

 git reset 

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

 git reset

БбрасываСт Ρ€Π°Π·Π΄Π΅Π» проиндСксированных Ρ„Π°ΠΉΠ»ΠΎΠ² Π΄ΠΎ состояния послСднСго ΠΊΠΎΠΌΠΌΠΈΡ‚Π°, Π½ΠΎ оставляСт Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° удаляСт ΠΈΠ· индСкса всС ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, Π½Π΅ пСрСзаписывая всС измСнСния, Ρ‡Ρ‚ΠΎ позволяСт ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ снимок состояния с нуля.

 git reset --hard

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

 git reset  

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

 git reset --hard  

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

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° ΠΈΠ· Ρ€Π°Π·Π΄Π΅Π»Π° проиндСксированных Ρ„Π°ΠΉΠ»ΠΎΠ²

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

# Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ² hello.py ΠΈ main.py # Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² индСкс всСх Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ· Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° git add . # ОсознаниС Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ измСнСния Π² Ρ„Π°ΠΉΠ»Π°Ρ… hello.py ΠΈ main.py # Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Π»ΠΈ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π² ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Ρ€Π°Π·Π½Ρ‹Ρ… состояний ΠΊΠΎΠ΄Π° # Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° main.py ΠΈΠ· индСкса git reset main.py # ΠšΠΎΠΌΠΌΠΈΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ„Π°ΠΉΠ»Π° hello.py git commit -m "Make some changes to hello.py" # ΠšΠΎΠΌΠΌΠΈΡ‚ Ρ„Π°ΠΉΠ»Π° main.py Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ снимкС состояния git add main.py git commit -m "Edit main.py"

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΊΠΎΠΌΠ°Π½Π΄Π° git reset ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΡΠΎΠ±Π»ΡŽΠ΄Π°Ρ‚ΡŒ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², позволяя Π½Π΅ Π²Π½ΠΎΡΠΈΡ‚ΡŒ измСнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ связаны со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠΌ.

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ²

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹ΠΉ сцСнарий использования. Он дСмонстрируСт, Ρ‡Ρ‚ΠΎ происходит, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Π½Π°Π΄ Π½ΠΎΠ²ΠΎΠΉ ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ, Π½ΠΎ послС добавлСния Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² состояния Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ всС ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ.

# Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° `foo.py` ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² Π½Π΅Π³ΠΎ ΠΊΠΎΠ΄Π° # ΠšΠΎΠΌΠΌΠΈΡ‚ Ρ„Π°ΠΉΠ»Π° Π² ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° git add foo.py git commit -m "Start developing a crazy feature" # ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° `foo.py` ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄Ρ€ΡƒΠ³ΠΈΡ… отслСТиваСмых Ρ„Π°ΠΉΠ»ΠΎΠ² # ΠšΠΎΠΌΠΌΠΈΡ‚ Π½ΠΎΠ²ΠΎΠ³ΠΎ состояния git commit -a -m "Continue my crazy feature" # Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ связанных с Π½Π΅ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² git reset --hard HEAD~2

Команда git reset HEAD~2 ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠΈ Π½Π° Π΄Π²Π° ΠΊΠΎΠΌΠΌΠΈΡ‚Π° Π½Π°Π·Π°Π΄, ΠΏΠΎ сути удаляя ΠΈΠ· истории ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΎΠ±Π° снимка состояния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ создали. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ этот Π²ΠΈΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ reset ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π½Π΅ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ². Никогда Π½Π΅ выполняйтС эту ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ, Ссли Π²Ρ‹ ΡƒΠΆΠ΅ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠ»ΠΈ свои ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π² ΠΎΠ±Ρ‰ΠΈΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ.

РСзюмС

Π˜Ρ‚Π°ΠΊ, git reset β€” это мощная ΠΊΠΎΠΌΠ°Π½Π΄Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ для ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ Git. Git reset Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с «трСмя Π΄Π΅Ρ€Π΅Π²ΡŒΡΠΌΠΈ GitΒ»: историСй ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² (HEAD), Ρ€Π°Π·Π΄Π΅Π»ΠΎΠΌ проиндСксированных Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠΌ. БущСствуСт Ρ‚Ρ€ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ этим Ρ‚Ρ€Π΅ΠΌ Π΄Π΅Ρ€Π΅Π²ΡŒΡΠΌ. Π­Ρ‚ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ β€” --soft, --mixed ΠΈ --hard β€” ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ git reset.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ воспользовались нСсколькими Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ Git для дСмонстрации Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ reset. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΠ± этих ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ… см. Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… страницах: git status, git log, git add, git checkout, git reflog ΠΈ git revert.

Машина Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π² git / Π₯Π°Π±Ρ€

Π’ послСднСС врСмя ΠΌΠΎΠΈ ΠΊΠΎΠ»Π»Π΅Π³ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ знакомство с git’ΠΎΠΌ. И ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰ΠΈΡ… ΠΈΡ… вопросов β€” ΠΊΠ°ΠΊ ΠΎΡ‚ΠΊΠ°Ρ‚ΠΈΡ‚ΡŒΡΡ Π΄ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΉ Ρ€Π΅Π²ΠΈΠ·ΠΈΠΈ. Π’ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π½Π°Π±ΠΎΡ€ ΠΊΠΎΠΌΠ°Π½Π΄, Π½ΠΎ хочСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Π»ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ…. Баловство с ΠΊΠΎΠΌΠ°Π΄Π°ΠΌΠΈ git’Π° Π±Π΅Π· понимания ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΏΠΎΡ‚Π΅Ρ€Π΅ истории Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ я Ρ…ΠΎΡ‡Ρƒ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ… git checkout ΠΈ git reset с ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ --soft ΠΈ --hard.


Π˜Ρ‚Π°ΠΊ, Π½Π°Ρ‡Π½Ρ‘ΠΌ ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΉ Π»ΠΈΠΊΠ±Π΅Π· ΠΏΠΎ машинС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, прСдоставляСмой git’ΠΎΠΌ. Π‘ΠΏΠ΅Ρ€Π²Π° ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ:

Π—Π΄Π΅ΡΡŒ ΠΊΡ€ΡƒΠΆΠΎΡ‡ΠΊΠ°ΠΌΠΈ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Ρ‹ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹. Π§Π΅ΠΌ ΠΏΡ€Π°Π²Π΅Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚, Ρ‚Π΅ΠΌ ΠΎΠ½ Π½ΠΎΠ²Π΅Π΅. ΠšΠΎΠΌΠΌΠΈΡ‚ с Ρ…ΡΡˆΠ΅ΠΌ 6e04e..-это самый ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚. Одно ΠΈΠ· основных понятий, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ стоит ΡƒΡΡΠ½ΠΈΡ‚ΡŒ сСбС Π½ΠΎΠ²ΠΈΡ‡ΠΊΡƒ, β€” это ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, Π° Ρ‚ΠΎΡ‡Π½Π΅Π΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Β«ΠΏΡ€ΠΎΠ·Π²ΠΈΡ‰Π΅Β» Ρ‚ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°. Π˜Ρ… Ρ‚ΡŒΠΌΠ° Ρ‚ΡŒΠΌΡƒΡ‰Π°Ρ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: HEAD, master, FETCH_HEAD, ORIG_HEAD ΠΈ Ρ‚.Π΄. Π­Ρ‚ΠΎ я пСрСчислил ΠΊΡ€ΡƒΠΏΠΈΡ†Ρƒ стандартных ΠΏΡ€ΠΎΠ·Π²ΠΈΡ‰. Π˜Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈ самим, Π½ΠΎ ΠΎΠ± этом Π²ΠΏΠ΅Ρ€Π΅Π΄ΠΈ.

Заострим нашС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π΄Π²ΡƒΡ… указатСлях: master ΠΈ HEAD. master ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° самый ΡΡ‚Π°Ρ€ΡˆΠΈΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ Π² Π²Π΅Ρ‚ΠΊΠ΅ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ master (эта Π²Π΅Ρ‚ΠΊΠ° создаётся ΠΏΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ рСпозитория). HEAD ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ master (Ρ‡ΠΈΡ‚Π°ΠΉ, Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС Ρ„Π°ΠΉΠ»ΠΎΠ²). ПослС появлСния ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ, HEAD ΠΈ master ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΊΠΎΠΌΠΌΠΈΡ‚. И Ρ‚Π°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΠΌΡΡ Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ, Π½Π΅ откатимся ΠΏΠΎ истории, Π»ΠΈΠ±ΠΎ Π½Π΅ ΡΠΎΠ²Π΅Ρ€ΡˆΠΈΠΌ ряд Π½Π΅ΠΎΠ±Π΄ΡƒΠΌΠ°Π½Π½Ρ‹Ρ… дСйствий. Π˜Ρ‚Π°ΠΊ, ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ Π½Π°ΡˆΡƒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ с указатСлями:

Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ HEAD Π² нашСм случаС ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° master, Π° master β€” Π½Π° ΠΊΠΎΠΌΠΌΠΈΡ‚ d79fb… АрхиваТно ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², находящихся ΠΏΠΎΠ΄ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅ΠΌ вСрсий, Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΊΠΎΠΌΠΌΠΈΡ‚, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ HEAD. Π’ΠΎ Π΅ΡΡ‚ΡŒ, Ссли HEAD Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° ΠΊΠΎΠΌΠΌΠΈΡ‚ с Ρ…ΡΡˆΠ΅ΠΌ 6e04e.., Ρ‚ΠΎ Ρ„Π°ΠΉΠ»Ρ‹ окаТутся Π² ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΌ своём состоянии. Для «двиТСния» указатСля HEAD сущСствуСт ΠΊΠΎΠΌΠ°Π½Π΄Π°: git checkout . Π’Π΅, ΠΊΡ‚ΠΎ Π·Π½Π°ΠΊΠΎΠΌ Ρ…ΠΎΡ‚ΡŒ Ρ‡ΡƒΡ‚ΡŒ-Ρ‡ΡƒΡ‚ΡŒ с git’ΠΎΠΌ, ΡƒΠ·Π½Π°Π»ΠΈ Π² этой ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ. Всё ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π²Π΅Ρ€Π½ΠΎ β€” ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ ΠΌΡ‹ просто пСрСносим ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ HEAD Π½Π° послСдний ΠΊΠΎΠΌΠΌΠΈΡ‚ Π²Π΅Ρ‚ΠΊΠΈ.

ΠŸΠ΅Ρ€Π΅Π½ΠΎΡ указатСля HEAD (git checkout)

ΠžΡ‚ΠΊΠ°Ρ‚ ΠΏΠΎ истории ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ²:

ПослС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ checkout ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² состоянии, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±Ρ‹Π»ΠΈ Π΄Π²Π° ΠΊΠΎΠΌΠΌΠΈΡ‚Π° Π½Π°Π·Π°Π΄. Π­Ρ‚ΠΎ всё прСкрасно β€” ΠΌΡ‹ сдСлали шаТок Π² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠ΅, Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Ρ‚Π°ΠΌ подглядСли, Π½ΠΎ ΠΊΠ°ΠΊ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ Π½Π°Π·Π°Π΄? Π― Π²ΠΎΡ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π΅ обладаю ΡΠ²Π΅Ρ€Ρ…ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, ΠΈ Π½Π΅ помню Ρ…ΡΡˆ самого послСднСго ΠΊΠΎΠΌΠΌΠΈΡ‚Π° (Ρ‚ΠΎΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ самый ΠΏΡ€Π°Π²Ρ‹ΠΉ β€” d79fb..). Если Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ git log, Ρ‚ΠΎ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ, ΡΠΎΡΡ‚ΠΎΡΡ‰ΡƒΡŽ ΠΈΠ· Ρ‚Ρ€Ρ‘Ρ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ²:

[user@localhost project]$ git log --pretty=oneline
6741a69bd121c295413be95d7597cd7409e713a0 add unit test
b3e74f50c3cc48e6b335014b6dc7e301b382a903 add readme
6e04e39d0952a2d6022502d56aaa05d5a064bea Initial commit

НСуТСли ΠΌΡ‹ потСряли всю ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ? Как ΡƒΠ·Π½Π°Ρ‚ΡŒ самый Β«Π½ΠΎΠ²Ρ‹ΠΉΒ» ΠΊΠΎΠΌΠΌΠΈΡ‚? Π­Ρ‚ΠΎ Π½Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° β€” Π΅ΡΡ‚ΡŒ Π²Ρ‹Ρ…ΠΎΠ΄, ΠΈ ΠΈΡ… нСсколько:

  1. ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git log --all. Данная ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ Π½Π°ΠΌ всю ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ, Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ соврСмСнности, Ρ‚.Π΅. Π² нашСм случаС ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΈΠ· пяти ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ²:
    [user@localhost project]$ git log --pretty=oneline --all
    d79fb5688af71b4577f450919535e7177e9d74e8 fix bug
    478927e3a088d3cec489ca8810eaaca97c6ce0ff documentation
    6741a69bd121c295413be95d7597cd7409e713a0 add unit test
    b3e74f50c3cc48e6b335014b6dc7e301b382a903 add readme
    6e04ee39d0952a2d6022502d56aaa05d5a064bea Initial commit
    


    Π”Π°Π»Π΅Π΅ остаётся ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹ΠΉ Π½Π°ΠΌ Ρ…ΡΡˆ ΠΈ вновь Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΌΠ°ΡˆΠΈΠ½Ρƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ: git checkout. Но Π΄Π°Π½Π½Ρ‹ΠΉ способ Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ слишком ΠΌΠ½ΠΎΠ³ΠΎ дСйствий.

  2. Git позволяСт ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ всС измСнСния указатСля HEAD. Π­Ρ‚ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ git reflog, Π½ΠΎ это ΡƒΠΆΠ΅ Π½Π΅ для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ² ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π΅ для поставлСнных Π½Π°ΠΌΠΈ Ρ†Π΅Π»Π΅ΠΉ. Π‘Π°ΠΌΠΎΠ΅ Π³Ρ€Π°ΠΌΠΎΡ‚Π½ΠΎΠ΅ β€” это ΠΏΠΎΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:
  3. Π’ΡΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ master ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° самый свСТСнький ΠΊΠΎΠΌΠΌΠΈΡ‚. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ Π² исходноС состояниС выполняСтся ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ: git checkout master. Π’ΡƒΠ°-ля:

Для прояснСния ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° git checkout создадим Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ devel:

[user@localhost project]$ git checkout -b devel

*Ρ„Π»Π°Π³ -b ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π²Π΅Ρ‚ΠΊΡƒ с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΈ сразу ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡΡ Π½Π° Π½Π΅Ρ‘.
ΠŸΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ ΡΠΎΠ²Π΅Ρ€ΡˆΡ‘Π½Π½ΠΎΠ΅ Π½Π°ΠΌΠΈ дСйствиС:

Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ HEAD ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ Π²Π΅Ρ‚ΠΊΠΈ devel.

ΠŸΠΎΡ€ΠΎΠ΄ΠΈΠΌ Π² Π½ΠΎΠ²ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅ нСсколько ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ². Π˜ΡΡ‚ΠΎΡ€ΠΈΡ рСпозитория Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ Π² Π²Π΅Ρ‚ΠΊΡƒ master происходит Ρ‚Π°ΠΊΠΆΠ΅ Π±Π΅Π·Π±ΠΎΠ»Π΅Π·Π½Π΅Π½Π½ΠΎ:

[user@localhost project]$ git checkout master

Π˜Ρ‚Π°ΠΊ, Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅ΠΌ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΡƒΠ½ΠΊΡ‚:

  • Комнда git checkout ΠΏΠ΅Ρ€Π΅Π΄Π²ΠΈΠ³Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ HEAD

ΠŸΠ΅Ρ€Π΅Π½ΠΎΡ указатСля Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ Π²Π΅Ρ‚ΠΊΠΈ (git reset ...)

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, git позволяСт Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ HEAD, Π½ΠΎ ΠΈ ΠΊΠΎΠ½Ρ‚ΠΈΠ½Π΅Ρ‚Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ Π²Π΅Ρ‚ΠΎΠΊ. Для этого сущСствуСт ΠΊΠΎΠΌΠ°Π½Π΄Π° git reset с ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ Π»ΠΈΠ±ΠΎ --soft, Π»ΠΈΠ±ΠΎ --hard.

  • ΠšΠ»ΡŽΡ‡ --hard ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ тСряСм Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ ΠΏΡ€ΠΈΠΎΠ±Ρ€Π΅Ρ‚Π°Π΅ΠΌ состояниС Ρ‚ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°, ΠΊΡƒΠ΄Π° Π±Ρ‹Π» сдСлан reset.
  • ΠšΠ»ΡŽΡ‡ --soft ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ НЕ тСряСм Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ ΡƒΠΆΠ΅ ΠΏΠ΅Ρ€Π΅Π΄Π²ΠΈΠ½ΡƒΡ‚, Ρ‚.Π΅. git status Π½Π°ΠΌ выдаст Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ состояниСм ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° (ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΡ‹ сдСлали reset) ΠΈ Ρ‚Π΅ΠΌ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ сдСлали reset.

Π’ ΠΎΠ±ΠΎΠΈΡ… случаях появляСтся Β«ΠΏΡ€ΠΎΠ·Π²ΠΈΡ‰Π΅Β» для ΠΊΠΎΠΌΠΌΠΈΡ‚Π°, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±Ρ‹Π» ΡΠΎΠ²Π΅Ρ€ΡˆΡ‘Π½ reset β€” ORIG_HEAD.

git reset --hard HEAD~2:

git reset --soft HEAD~2:

ORIG_HEAD ΠΏΠΎΠ»Π΅Π·Π΅Π½ для рСдактирования Π½Π΅Π²Π΅Ρ€Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π½Π° локальной машинС (!). ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π΄Π²Π° послСдних ΠΊΠΎΠΌΠΌΠΈΡ‚Π° Π² Π΅Π΄ΠΈΠ½Ρ‹ΠΉ. Для этого, сохраняя Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ master Π½Π° Π΄Π²Π° ΠΊΠΎΠΌΠΌΠΈΡ‚Π° Π½Π°Π·Π°Π΄:

[user@localhost project]$ git reset --soft  HEAD~2

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ Π½Π° измСнСния:

[user@localhost project]$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#	ЧВО-ВО ВАМ Π”Π›Π― КОММИВА
#

Ну Π° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ сдСлаСм Ρ‚Ρ€ΡŽΠΊ β€” объСдиняСм ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹

[user@localhost project]$ git commit -c ORIG_HEAD

Π’Π²ΠΎΠ΄ΠΈΠΌ сообщСниС, сохраняСмся. Π’Π΅ΠΏΠ΅Ρ€ΡŒ наша история выглядит Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:

Π’Π°ΠΆΠ½ΠΎΠ΅ Π·Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ β€” ORIG_HEAD ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΊΠΎΠΌΠΌΠΈΡ‚ d79fb… Если ΠΌΡ‹ сСйчас Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git checkout ORIG_HEAD, Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ состояниС detach HEAD. Оно характСризуСтся Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ HEAD ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π΅ Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ Π²Π΅Ρ‚ΠΊΠΈ, Π° просто Π½Π° ΠΊΠΎΠΌΠΌΠΈΡ‚. HEAD всСгда Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Π²Π΅Ρ‚ΠΊΠΈ!

Π§Ρ‚ΠΎΠ±Ρ‹ Β«Π²Ρ‹ΠΉΡ‚ΠΈΒ» ΠΈΠ· состояния detach HEAD достаточно просто ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° ΠΊΠ°ΠΊΡƒΡŽ-Π»ΠΈΠ±ΠΎ Π²Π΅Ρ‚ΠΊΡƒ ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ git checkout -b new_branch_name

Π˜Ρ‚Π°ΠΊ, Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅ΠΌ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΡƒΠ½ΠΊΡ‚:

  • git reset с ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ --soft ΠΈΠ»ΠΈ --hard Π΄Π²ΠΈΠ³Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ Π²Π΅Ρ‚ΠΊΠΈ, Π° вмСстС с Π½ΠΈΠΌ ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ HEAD.

И самоС Π³Π»Π°Π²Π½ΠΎΠ΅! Бамая частая опСрация ΠΈΠ· Π²Ρ‹ΡˆΠ΅ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с git`ΠΎΠΌ β€” это ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Π΅Ρ‚ΠΊΠ°ΠΌΠΈ. ВсС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ рассмотрСнныС случаи Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ Ρ€Π΅Π΄ΠΊΠΎ, Π½ΠΎ Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ всё, Ρ‡Ρ‚ΠΎ происходит ΠΏΡ€ΠΈ ΠΈΡ… использовании!

Π£Π΄Π°Ρ‡Π½Ρ‹Ρ… Π²Π°ΠΌ ΠΏΡƒΡ‚Π΅ΡˆΠ΅ΡΡ‚Π²ΠΈΠΉ ΠΏΠΎ истории своСго рСпозитория!

ΠŸΡ€ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° использовались ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ источники:

Π‘Π°ΠΌΡ‹ΠΉ Π»ΡƒΡ‡ΡˆΠΈΠΉ manual β€” ΠΊΠ½ΠΈΠ³Π°: ProGit

Наглядная справка ΠΏΠΎ git: A Visual Git Reference (Русская вСрсия)

UPD:

Π’ коммСнтариях посовСтовали Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ рСсурс ΠΏΠΎ git`Ρƒ: githowto

P.S. Π‘Π»Π°Π³ΠΎΠ΄Π°Ρ€ΡŽ Π·Π° ΠΈΠ½Π²Π°ΠΉΡ‚ ΠΈ всСм ТСлаю приятных Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ…!

основы Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ процСсса ΠΈ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹

Π‘Ρ‚Π°Ρ‚ΡŒΡ «Git для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…» Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π° Π½Π° ΡƒΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π°Π²Ρ‹ΠΊΠ° Π΅Π³ΠΎ использования ΠΈ исправлСниС распространСнных ошибок.

Рассмотрим Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ситуации ΠΈΠ· ΠΆΠΈΠ·Π½ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° (ΠΈ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ). К ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚ΡŒΡΡ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅.

Git init

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ ΠΏΠΎΠ΄Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ .git, Π³Π΄Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ всС Ρ„Π°ΠΉΠ»Ρ‹ рСпозитория, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ git init. Если поддирСктория ΡƒΠΆΠ΅ сущСствуСт, ΠΏΡ€ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΉ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΎ сообщСниС Reinitialized existing Git repository in.

GitΒ add

Π’Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Ρ„Π°ΠΉΠ»Ρ‹ с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ. МоТно Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ всС Ρ„Π°ΠΉΠ»Ρ‹ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ, Π½ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ *.< имя_Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ>, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ всС Ρ„Π°ΠΉΠ»Ρ‹ с этим Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ:

git add *.py

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ ΠΈ слСдом ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ имя ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ. Она Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ всС .py Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ· ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² models/directory:

git add models/\*.py

GitΒ clean

Допустим, Π²Ρ‹ создали нСсколько Π½ΠΎΠ²Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ»ΠΈ ΠΏΠ°ΠΏΠΎΠΊ Π² Π²Π΅Ρ‚ΠΊΠ΅ Git, Π° Ρ‡Π΅Ρ€Π΅Π· врСмя оказалось, Ρ‡Ρ‚ΠΎ эти Ρ„Π°ΠΉΠ»Ρ‹ большС Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹. Π’ этом случаС Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ своС Ρ€Π°Π±ΠΎΡ‡Π΅Π΅ Π΄Π΅Ρ€Π΅Π²ΠΎ ΠΎΡ‚ Π»ΠΈΡˆΠ½ΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ² (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ git add) ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:

git clean -df

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ untracked-Ρ„Π°ΠΉΠ»Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

git clean -dn

GitΒ rm

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π² ΠΏΠΎΠ΄Π±ΠΎΡ€ΠΊΠ΅ «Git для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…» ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ отслСТиваСмыС Ρ„Π°ΠΉΠ»Ρ‹:

git rm <ΠΏΡƒΡ‚ΡŒ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ>

Если удаляСмый Ρ„Π°ΠΉΠ» находится Π² staging-области, Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ„Π»Π°Π³:

git rm <ΠΏΡƒΡ‚ΡŒ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ> -f

На случай Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ· рСпозитория, Π° Π² своСй Π€Π‘ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ эту ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

git rm --cached <ΠΏΡƒΡ‚ΡŒ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ>

Git branch

Π’Ρ‹ сдСлали ΠΎΠΏΠ΅Ρ‡Π°Ρ‚ΠΊΡƒ Π² ΠΈΠΌΠ΅Π½ΠΈ Π²Π΅Ρ‚ΠΊΠΈ ΠΈΠ»ΠΈ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π΅ имя? Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π²Π°ΠΌ Π² ΠΏΠΎΠΌΠΎΡ‰ΡŒ:

git branch -m <староС имя Π²Π΅Ρ‚ΠΊΠΈ> <Π½ΠΎΠ²ΠΎΠ΅ имя Π²Π΅Ρ‚ΠΊΠΈ>

Если Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ имя Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠΈ:

git branch -m <Π½ΠΎΠ²ΠΎΠ΅ имя Π²Π΅Ρ‚ΠΊΠΈ>

Для измСнСния ΠΈΠΌΠ΅Π½ΠΈ Π·Π°ΠΏΡƒΡˆΠΈΠ½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ потрСбуСтся Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ нСсколько Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… шагов:

git push <имя ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ> --delete <староС имя Π²Π΅Ρ‚ΠΊΠΈ>
git push <имя ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ> <Π½ΠΎΠ²ΠΎΠ΅ имя Π²Π΅Ρ‚ΠΊΠΈ>

Если имя локальной Π²Π΅Ρ‚ΠΊΠΈ Π½Π΅ совпадаСт с ΠΈΠΌΠ΅Π½Π΅ΠΌ Π²Π΅Ρ‚ΠΊΠΈ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

git push <имя ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ> <локальноС имя Π²Π΅Ρ‚ΠΊΠΈ>:<имя ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ>

Git log

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ Git ΠΊΠΎΠΌΠΌΠΈΡ‚, примСняйтС ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git log. Π’Π°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Π½ΠΎ срСди этого Π²Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ commit id ΠΈ сообщСниС. Для измСнСния Π²Ρ‹Π²ΠΎΠ΄Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

git log --oneline

Она ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄, ΠΊΠ°ΠΊ Π½Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅ Π½ΠΈΠΆΠ΅.

ΠŸΠ΅Ρ€Π²Ρ‹Π΅ сСмь символов – это сокращСнный commit id, Π° послС Π½Π΅Π³ΠΎ ΠΈΠ΄Π΅Ρ‚ сообщСниС. Commit id прСдставлСн Π² сокращСнном Π²ΠΈΠ΄Π΅, Ρ‚. ΠΊ. «ΠΏΠΎΠ»Π½Π°Ρ вСрсия» состоит ΠΈΠ· сорока ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½Ρ‹Ρ… символов, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… Π½Π° 160-разрядный SHA1 Ρ…ΡΡˆ.
Head -> master – ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π² Π²Π΅Ρ‚ΠΊΠ΅ master.

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ сообщСниС ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Π°Π²Ρ‚ΠΎΡ€Π°, ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ это:

git log --author="John Doe"

Git stash

Допустим, Π²Ρ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ Π²Π΅Ρ‚ΠΊΠΈ ΠΏΠ΅Ρ€Π΅Π΄ внСсСниСм ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. Для этого Π΅ΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Π° stash, которая Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‡Π΅Π΅ Π΄Π΅Ρ€Π΅Π²ΠΎ Π² «Ρ‡ΠΈΡΡ‚ΠΎΡ‚Π΅»:

git stash

Для ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π΄Π΅Π»Π°ΠΉΡ‚Π΅ Ρ‚Π°ΠΊ:

git stash pop

А Ссли ΠΏΠ΅Ρ€Π΅Π΄ΡƒΠΌΠ°Π»ΠΈ, Π΄Π΅Π»Π°ΠΉΡ‚Π΅ ΠΎΡ‚ΠΊΠ°Ρ‚:

git stash drop

Git checkout

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

git checkout <имя Π²Π΅Ρ‚ΠΊΠΈ>

НС Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ измСнСния ΠΈΠ»ΠΈ Π΄Π΅Π»Π°Ρ‚ΡŒ Git ΠΊΠΎΠΌΠΌΠΈΡ‚ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠ΅. Если этого Π½Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, измСнСния ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚Ρ€Π°Π·ΠΈΡ‚ΡŒΡΡ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²Π΅Ρ‚ΠΊΠ°Ρ…, Π° Π²Π°ΠΌ это Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ.

НапримСр, Π΅ΡΡ‚ΡŒ Π²Π΅Ρ‚ΠΊΠ° development, ΠΈ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π΅ копию, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ Π² Π½Π΅Π΅ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

(development)$ git checkout -b <Π½ΠΎΠ²ΠΎΠ΅ имя Π²Π΅Ρ‚ΠΊΠΈ>

Git commit

Π’Ρ‹ Π·Π°ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΈΠ»ΠΈ измСнСния, ΠΏΠΎΠ·ΠΆΠ΅ поняли, Ρ‡Ρ‚ΠΎ допустили ΠΎΡˆΠΈΠ±ΠΊΡƒ, ΠΈΠ»ΠΈ просто Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ описаниС Π±ΠΎΠ»Π΅Π΅ понятным. Π’ΠΎΠ³Π΄Π° эта команда – Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ:

git commit --amend -m "сообщСниС"

Если Π²Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π½ΠΎΠ²Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ»ΠΈ исправили ΠΎΡˆΠΈΠ±ΠΊΡƒ, Π½ΠΎ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ commit-сообщСниС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ с Ρ„Π»Π°Π³ΠΎΠΌ —no-edit:

git commit --amend --no-edit

Π’Ρ‹ Π·Π°ΠΏΡƒΡˆΠΈΠ»ΠΈ свой ΠΊΠΎΠ΄ Π² ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, Π° Π·Π°Ρ‚Π΅ΠΌ поняли, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ commit-сообщСниС. Для этого послС внСсСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ сдСлайтС ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ push. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ имя ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ рСпозитория Π² качСствС источника, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅:

git push origin <имя Π²Π΅Ρ‚ΠΊΠΈ> -f

Git reset

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ послСдний ΠΊΠΎΠΌΠΌΠΈΡ‚, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅Β git reset. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚Ρ€ΠΈ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… Ρ„Π»Π°Π³Π° сброса:

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ измСнСния, Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° добавлСния Ρ„Π°ΠΉΠ»Π° two.txt, ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π³ΠΎ commit id 96b037c.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git reset с Ρ„Π»Π°Π³ΠΎΠΌ soft:

git reset --soft 96b037c

git resetsoftΒ «ΠΏΠΎΡ‚СряСт» всС ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ послС этого ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 96b037c), Π½ΠΎ Ρ„Π°ΠΉΠ»Ρ‹ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹, ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠΉ области.

ΠŸΠΎΡ‚Π΅Ρ€ΡΠ½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ прямой ссылки для доступа ΠΊ Π½ΠΈΠΌ. Π’Π°ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΈ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ git reflog. Git навсСгда ΡƒΠ΄Π°Π»ΠΈΡ‚ «ΠΏΠΎΡ‚Π΅Ρ€ΡΡˆΠΊΠΈ», ΠΊΠΎΠ³Π΄Π° запустится сборщик мусора (запуск производится ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ 30 Π΄Π½Π΅ΠΉ).

ΠŸΡ€ΠΈ запускС git statusΒ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅:

Если Π²Ρ‹ запуститС git log —oneline, Ρ‚ΠΎ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π±Ρ‹Π»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹:

Если Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ reset с Ρ„Π»Π°Π³ΠΎΠΌ —mixed, ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ станут «ΠΏΠΎΡ‚Срянными», Ρ„Π°ΠΉΠ»Ρ‹ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠΉ области, Π½ΠΎ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΉΡ‚ΠΈ Π² Π€Π‘. Если Π²Ρ‹ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ ΡƒΠΊΠ°ΠΆΠ΅Ρ‚Π΅ Ρ„Π»Π°Π³ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ reset, Ρ„Π»Π°Π³ —mixed Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

ΠŸΡ€ΠΈ запускС git statusΒ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

Если Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹, запуститС ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ reset с Ρ„Π»Π°Π³ΠΎΠΌ —hard.

РСкомСндуСтся сначала Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ reset —soft, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹. Если всС Ρ…ΠΎΡ€ΠΎΡˆΠΎ, запускайтС reset —hard.

Никогда Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ git reset <commit-id> послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ всС Π·Π°ΠΏΡƒΡˆΠ΅Π½ΠΎ Π² общСдоступный Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ. Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‡Π»Π΅Π½Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, создаСт ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹.

Git revert

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ способ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Git ΠΊΠΎΠΌΠΌΠΈΡ‚:

git revert <commit-id> --no-commit

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π·Π°Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ git status. Π—Π°Ρ‚Π΅ΠΌ git commit -m «commit-message».

Revert отмСняСт Π½Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚, Π° измСнСния Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½Π½ΠΎΠ³ΠΎ commit-id.

НапримСр, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ послСдний ΠΊΠΎΠΌΠΌΠΈΡ‚. ПослС revert-Π° статус Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

ΠŸΠ΅Ρ€Π΅Π΄ послСдним ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠΌ Ρ„Π°ΠΉΠ» six.txt Π½Π΅ Π±Ρ‹Π» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½, поэтому ΠΎΠ½ ΡƒΠ΄Π°Π»Π΅Π½, Π° five.txt возвращаСтся Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π΅ состояниС. Π’Π΅ΠΏΠ΅Ρ€ΡŒ история Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ нСсколько ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

git revert <старый commit-id>..<Π½Π΅Π΄Π°Π²Π½ΠΈΠΉ commit-id> --no-commit

Если Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ нСсколько ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², Π²Π½Π΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°, слСдуСт ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ commit-id:

git revert <commit-id-1> <commit-id-2> --no-commit

Git cherry-pick

И послСдняя ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈΠ· Ρ€ΡƒΠ±Ρ€ΠΈΠΊΠΈ Git для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… – cherry-pick. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, исправлСниС ошибки) Π² Π²Π΅Ρ‚ΠΊΠ΅ «Π», работая Π² Π²Π΅Ρ‚ΠΊΠ΅ «Π‘», ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ cherry-pick.

Π‘Π½Π°Ρ‡Π°Π»Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° Π²Π΅Ρ‚ΠΊΡƒ с ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠΌ, ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ commit-id, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² свою Π²Π΅Ρ‚ΠΊΡƒ. Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚ Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠ΅:

git cherry-pick <commit-id>

GitΒ fetch

Команда для случаСв, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ всС ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΠΈΠ· Π½ΡƒΠΆΠ½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ (ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ) ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈΡ… Π²Β local repository. ПослС выполнСния git fetch Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ ссылки Π½Π° Π²Π΅Ρ‚ΠΊΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π‘ΡƒΡ‚ΡŒ ΠΈ Π³Π»Π°Π²Π½ΠΎΠ΅ прСимущСство ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ с Π΅Π΅ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Ρ‹ Π½Π΅ сливаСтС всС ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π² ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ.

Git merge

А Π²ΠΎΡ‚ git merge ΠΊΠ°ΠΊ Ρ€Π°Π· для этого ΠΈ Π½ΡƒΠΆΠ΅Π½.

Git pull

Данная команда – симбиоз git fetch ΠΈΒ git merge. Π¨ΠΎΡ€Ρ‚ΠΊΠΎΠ΄ Ρ…ΠΎΡ€ΠΎΡˆ, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли Π²Π°ΠΌ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡΠ»ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ сразу послС ΠΈΡ… сбора.

Git push

Если git pull ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для ΠΌΠ΅Ρ€ΠΆΠ° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΈΠ· ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ, Ρ‚ΠΎ git push дСйствуСт с Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ Π΄ΠΎ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚: Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ измСнСния ΠΏΡƒΡˆΠ°Ρ‚ΡΡ Π² ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ.

Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ:

git push origin master

Π§Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΊΠΎΠΌΠΌΠΈΡ‚ ΠΈΠ· локальной Π²Π΅Ρ‚ΠΊΠΈ master Π½Π° ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ origin.

А ΠΊΠ°ΠΊΠΈΠ΅ Π΅Ρ‰Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π²Ρ‹ Π±Ρ‹ посовСтовали ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ°ΠΌ?

ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»

10 ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… Git ΠΊΠΎΠΌΠ°Π½Π΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Π»Π΅Π³Ρ‡Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ

Π’Π΅Π΄ΡƒΡ‰ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ подСлились Ρ‚ΠΎΠΏΠΎΠΌ Git ΠΊΠΎΠΌΠ°Π½Π΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅Π·Π°ΠΌΠ΅Π½ΠΈΠΌΡ‹ Π² Ρ€Π°Π±ΠΎΡ‚Π΅ с самой популярной систСмой контроля вСрсий.

Π—Π° послСдниС нСсколько Π»Π΅Ρ‚ ΠΏΠΎΠΏΡƒΠ»ΡΡ€Π½ΠΎΡΡ‚ΡŒ git возросла, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ этой систСмС ΡΡ‚Π°Ρ‚ΡŒ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнной. Она ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ программистами ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², начиная нСбольшими ΠΎΠΏΠ΅Π½-сорс ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠΈ заканчивая linux kernel. БущСствуСт большоС количСство Git ΠΊΠΎΠΌΠ°Π½Π΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π°ΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ.

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΆΠ΅ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ Ρ‚ΠΎΠΏΒ Git ΠΊΠΎΠΌΠ°Π½Π΄.

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ всю ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², Π½ΠΎ пропускаСт Ρ‚Π΅, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΈ слияния Π΄Π²ΡƒΡ… Π²Π΅Ρ‚ΠΎΠΊ, ΠΈΠ»ΠΈ Π³Π΄Π΅ Π±Ρ‹Π» Ρ€Π΅ΡˆΠ΅Π½ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ фиксации. Она позволяСт быстро ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ всС измСнСния, сдСланныС Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Π±Π΅Π· скоплСния слияний Π² истории git.

$git log --no-merges

commit e75fe8bf2c5c46dbd9e1bc20d2f8b2ede81f2d93
Author:  John
Date:   Mon Jul 10 18:04:50 2017 +0300

    Add new branch.

commit 080dfd342ab0dbdf69858e3b01e18584d4eade34
Author:  John
Date:   Mon Jul 11 15:40:56 2017 +0300

    Added index.php.

commit 2965803c0deeac1f2427ec2f5394493ed4211655
Author:  John
Date:   Mon Jul 13 12:14:50 2017 +0300

    Added css files.

Git revert создаСт Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ с содСрТимым, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΌ ΠΈΠ· всСх ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ ΠΈΠΌ ΠΎΡ‚ΠΌΠ΅Π½Π΅Π½Ρ‹. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π½Π°Π·Π²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΈΡ‚ ΠΈ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ автоматичСских, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ‐‐no-commit ΠΈΠ»ΠΈ сокращСниС -n.

Git diff ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ измСнСния ΠΌΠ΅ΠΆΠ΄Ρƒ двумя ΠΊΠΎΠΌΠΌΠΈΡ‚Π°ΠΌΠΈ, Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌΠΈ Π΄Π΅Ρ€Π΅Π²ΡŒΡΠΌΠΈ ΠΈΠ»ΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ Π½Π° дискС. Когда нСсколько Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π°Π΄ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ, часто происходят измСнСния ΠΈΠ·-Π·Π° tab тСкстового Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ различия, Π²Ρ‹Π·Π²Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ ΠΏΡ€ΠΈ сравнСнии строк, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ с -w.

ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π±Ρ‹Π» ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ Π·Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ врСмя. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ 3 ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°: width для опрСдСлСния ΡˆΠΈΡ€ΠΈΠ½Ρ‹ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, name-width для установки ΡˆΠΈΡ€ΠΈΠ½Ρ‹ ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π° ΠΈ count для ограничСния Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠ΅ число строк.

$ git diff --stat
 index.php | 83 +++++++++++++++++++++++++++++---------------------------
 1 file changed, 43 insertions(+), 40 deletions(-)	
$ git diff --stat-width=10
 index.php | 83 +++---
 1 file changed, 43 insertions(+), 40 deletions(-)	

Π‘Π±Ρ€ΠΎΡΡŒΡ‚Π΅ head Π΄ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°, Π½Π΅ касаясь индСксного Ρ„Π°ΠΉΠ»Π° ΠΈ Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ Π΄Π΅Ρ€Π΅Π²Π°. ВсС измСнСния, сдСланныС послС этой фиксации, пСрСносятся Π½Π° этап β€œΠΏΠΎΡΡ‚Π°Π²Π»Π΅Π½Ρ‹ для коммита”. Π”Π°Π»Π΅Π΅ Π²Π°ΠΌ просто Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ git commit, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΈΡ… ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ.

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° создаСт Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ с ΠΈΠΌΠ΅Π½Π΅ΠΌ branch-name ΠΈ провСряСт Π΅Π΅, Π° Π·Π°Ρ‚Π΅ΠΌ примСняСт ΠΊ Π½Π΅ΠΉ измСнСния ΠΎΡ‚ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ stash ΠΈ сбрасываСт Π΅Π³ΠΎ. Если Π½ΠΈ ΠΎΠ΄ΠΈΠ½ stash Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ послСдний. Π­Ρ‚ΠΎ позволяСт ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ спрятанныС измСнСния Π² Π±ΠΎΠ»Π΅Π΅ бСзопасной срСдС, которая впослСдствии ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ объСдинСна с мастСром.

Команда ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ список всСх ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Ρ… ΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Π²Π΅Ρ‚Π²Π΅ΠΉ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π»Π°Π³ ‐‐merged, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ Π²Π΅Ρ‚ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Ρ‹ с Π³Π»Π°Π²Π½ΠΎΠΉ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ свои Π²Π΅Ρ‚ΠΊΠΈ ΠΈ ΡƒΠ·Π½Π°Π²Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠ· Π½ΠΈΡ… большС Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ, ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹.

$ git branch -a

  dev
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/dev

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ git commit ‐‐amend Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ свой ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚, вмСсто Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ. Если Π²Ρ‹ Π½Π΅ внСсли свои измСнСния Π² ΡƒΠ΄Π°Π»Π΅Π½Π½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эту ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ для внСсСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² послСдний ΠΊΠΎΠΌΠΌΠΈΡ‚, добавлСния послСдних ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈ Π΄Π°ΠΆΠ΅ измСнСния сообщСния ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅.

Git pull ‐‐rebase заставляСт git сначала Π²Ρ‹Ρ‚Π°Ρ‰ΠΈΡ‚ΡŒ измСнСния, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΠΏΠΎΠ²Π΅Ρ€Ρ… послСднСй вСрсии ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ‐‐rebase ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для создания Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ истории, избСгая Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… фиксаций.

Когда Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ эту ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ вмСсто Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠ³ΠΎ добавлСния всСх ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, систСма ΡΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ ΠΈΠ· Π½ΠΈΡ…. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Ρ‹ смоТСтС сами Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π·Π°ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΈΡ‚ΡŒ.

diff --git a/package.json b/package.json
index db78332..a814f7e 100644
--- a/package.json
+++ b/package.json
@@ -6,7 +6,6 @@
   },
   "devDependencies": {
     "bootstrap-sass": "^3.3.7",
-    "gulp": "^3.9.1",
     "jquery": "^3.1.0",
     "laravel-elixir": "^6.0.0-11",
     "laravel-elixir-vue-2": "^0.2.0",
Stage this hunk [y,n,q,a,d,/,e,?]? 


Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π’Π°ΠΊΠΆΠ΅ Π²Π°ΠΌ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ½Ρ€Π°Π²ΠΈΡ‚ΡŒΡΡ:

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ git reset —soft? — git

Π― Ρ€Π°Π±ΠΎΡ‚Π°ΡŽ с git Ρ‡ΡƒΡ‚ΡŒ большС мСсяца. Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, я Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ использовал reset Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‡Π΅Ρ€Π°, Π½ΠΎ мягкий сброс всС Π΅Ρ‰Π΅ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ для мСня большого смысла.

Π― понимаю, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ³Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ мягкий сброс для рСдактирования фиксации Π±Π΅Π· измСнСния индСкса ΠΈΠ»ΠΈ Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°, ΠΊΠ°ΠΊ это Π±Ρ‹Π»ΠΎ Π±Ρ‹ с git commit --amend .

Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»ΠΈ эти Π΄Π²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ ( reset --soft vs commit --amend)? Π•ΡΡ‚ΡŒ Π»ΠΈ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ΅ Π² практичСском ΠΏΠ»Π°Π½Π΅? И Ρ‡Ρ‚ΠΎ Π΅Ρ‰Π΅ Π±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΠΎ, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ способы использования reset --soft , ΠΊΡ€ΠΎΠΌΠ΅ внСсСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΠΊΠΎΠΌΠΌΠΈΡ‚?

git

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ


AJJ Β  Β 

05 ΠΌΠ°Ρ€Ρ‚Π° 2011 Π² 11:31

11 ΠžΡ‚Π²Π΅Ρ‚ΠΎΠ²



96

git reset -это всС ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ HEAD , ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π²Π΅Ρ‚Π²ΡŒ ref .

Вопрос: А ΠΊΠ°ΠΊ насчСт Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ Π΄Π΅Ρ€Π΅Π²Π° ΠΈ индСкса?

ΠŸΡ€ΠΈ использовании с --soft, пСрСмСщаСтся HEAD, Ρ‡Π°Ρ‰Π΅ всСго обновляя Π²Π΅Ρ‚Π²ΡŒ ref, ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ HEAD .

Π­Ρ‚ΠΎ отличаСтся ΠΎΡ‚ commit --amend ΠΊΠ°ΠΊ:

  • это Π½Π΅ создаСт Π½ΠΎΠ²ΡƒΡŽ Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ.
  • ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ фактичСски ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ HEAD Π² Π»ΡŽΠ±ΡƒΡŽ Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ (ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ commit --amend — это Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ HEAD, позволяя ΠΏΡ€ΠΈ этом ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ)

ΠŸΡ€ΠΎΡΡ‚ΠΎ нашСл Ρ‚Π°ΠΊΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ объСдинСния:

  • классичСскоС слияниС
  • слияниС ΠΏΠΎΠ΄Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π²

всС Π² ΠΎΠ΄ΠΈΠ½ (осьминог, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‚Π°ΠΌ большС Π΄Π²ΡƒΡ… Π²Π΅Ρ‚Π²Π΅ΠΉ слилось) ΡΠΎΠ²Π΅Ρ€ΡˆΠ°ΡŽΡ‚ слияниС.

Вомас «wereHamster» ΠšΠ°Ρ€Π½Π΅ΠΊΠΈ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ Π² своСй ΡΡ‚Π°Ρ‚ΡŒΠ΅ «Subtree Octopus merge» :

  • БтратСгия слияния ΠΏΠΎΠ΄Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использована, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π² ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π² Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌ состоянии. Π­Ρ‚ΠΎ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° подмодулям git.
  • БтратСгия слияния octopus ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использована для объСдинСния Ρ‚Ρ€Π΅Ρ… ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Π²Π΅Ρ‚Π²Π΅ΠΉ. ΠžΠ±Ρ‹Ρ‡Π½Π°Ρ стратСгия ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π²Π΅ Π²Π΅Ρ‚Π²ΠΈ, ΠΈ Ссли Π²Ρ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ большС, Ρ‚ΠΎ git автоматичСски вСрнСтся ΠΊ стратСгии осьминога.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Ρƒ ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ. Но я Ρ…ΠΎΡ‚Π΅Π» ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ эти Π΄Π²Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‡ΠΈΡΡ‚ΡƒΡŽ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ вСсь Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎ обновляСтся Π΄ΠΎ Π½ΠΎΠ²ΠΎΠΉ вСрсии.

Π£ мСня Π΅ΡΡ‚ΡŒ супСрпроСкт , Π½Π°Π·ΠΎΠ²Π΅ΠΌ Π΅Π³ΠΎ projectA, ΠΈ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ projectB , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я слил Π² ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ projectA .

(это Ρ‡Π°ΡΡ‚ΡŒ слияния ΠΏΠΎΠ΄Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π²)

Π― Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽ нСсколько мСстных ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ².

ProjectA рСгулярно обновляСтся, projectB ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ ΠΏΠ°Ρ€Ρƒ Π΄Π½Π΅ΠΉ ΠΈΠ»ΠΈ нСдСль ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ зависит ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ вСрсии projectA .

Когда я Ρ€Π΅ΡˆΠ°ΡŽ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΎΠ±Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, я Π½Π΅ просто Π²Ρ‹Ρ‚Π°ΡΠΊΠΈΠ²Π°ΡŽ ΠΈΠ· projectA ΠΈ projectB , ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это создаст Π΄Π²Π° ΠΊΠΎΠΌΠΌΠΈΡ‚Π° для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹ΠΌ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ всСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° .

ВмСсто этого я создаю ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠΌΠΌΠΈΡ‚ слияния , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ projectA, projectB ΠΈ ΠΌΠΎΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ .

Π₯итрая Ρ‡Π°ΡΡ‚ΡŒ здСсь Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ это слияниС осьминога (Ρ‚Ρ€ΠΈ Π³ΠΎΠ»ΠΎΠ²Ρ‹), Π½ΠΎ projectB Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ со стратСгиСй ΠΏΠΎΠ΄Π΄Π΅Ρ€Π΅Π²Π° . Π’Π°ΠΊ Π²ΠΎΡ‚ Ρ‡Π΅ΠΌ я занимаюсь:

# Merge projectA with the default strategy:
git merge projectA/master

# Merge projectB with the subtree strategy:
git merge -s subtree projectB/master

Π—Π΄Π΅ΡΡŒ Π°Π²Ρ‚ΠΎΡ€ использовал reset --hard , Π° Π·Π°Ρ‚Π΅ΠΌ read-tree , Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π° слияния сдСлали с Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌ Π΄Π΅Ρ€Π΅Π²ΠΎΠΌ ΠΈ индСксом, Π½ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ здСсь ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ reset --soft:

Как ΠΌΠ½Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ эти Π΄Π²Π° слияния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сработали, Ρ‚. Π΅. ΠΌΠΎΠ΅ Ρ€Π°Π±ΠΎΡ‡Π΅Π΅ Π΄Π΅Ρ€Π΅Π²ΠΎ ΠΈ индСкс Π² порядкС, Π½ΠΎ Π±Π΅Π· нСобходимости Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ эти Π΄Π²Π° ΠΊΠΎΠΌΠΌΠΈΡ‚Π°?

# Move the HEAD, and just the HEAD, two commits back!
git reset --soft HEAD@{2}

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Вомаса:

# Pretend that we just did an octopus merge with three heads:
echo $(git rev-parse projectA/master) > .git/MERGE_HEAD
echo $(git rev-parse projectB/master) >> .git/MERGE_HEAD

# And finally do the commit:
git commit

Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·:

  • Π²Ρ‹ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€Π΅Π½Ρ‹ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ вас получаСтся (Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ Π΄Π΅Ρ€Π΅Π²Π° ΠΈ индСкса)
  • Π²Ρ‹ Π½Π΅ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€Π΅Π½Ρ‹ всСми ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΈΡΡŒ Π²Π°ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Ρ‚ΡƒΠ΄Π°:

git reset --soft — Π²ΠΎΡ‚ ΠΎΡ‚Π²Π΅Ρ‚.

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ


VonC Β  Β 

05 ΠΌΠ°Ρ€Ρ‚Π° 2011 Π² 12:36



32

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ использования-объСдинСниС сСрии Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ²

«Oops. Those three commits could be just one.»

Π˜Ρ‚Π°ΠΊ, ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚Π΅ послСдниС 3 (ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΅Ρ‰Π΅) ΠΊΠΎΠΌΠΌΠΈΡ‚Π° (Π½Π΅ затрагивая Π½ΠΈ индСкс, Π½ΠΈ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³). Π—Π°Ρ‚Π΅ΠΌ зафиксируйтС всС измСнСния ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎ Ρ†Π΅Π»ΠΎΠ΅.

E.g.

> git add -A; git commit -m "Start here."
> git add -A; git commit -m "One"
> git add -A; git commit -m "Two"
> git add -A' git commit -m "Three"
> git log --oneline --graph -4 --decorate

> * da883dc (HEAD, master) Three
> * 92d3eb7 Two
> * c6e82d3 One
> * e1e8042 Start here.

> git reset --soft HEAD~3
> git log --oneline --graph -1 --decorate

> * e1e8042 Start here.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ всС ваши измСнСния сохранСны ΠΈ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ Π±Ρ‹Ρ‚ΡŒ зафиксированы ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎ Ρ†Π΅Π»ΠΎΠ΅.

ΠšΠΎΡ€ΠΎΡ‚ΠΊΠΈΠ΅ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ Π½Π° ваши вопросы

Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»ΠΈ эти Π΄Π²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ ( reset --soft vs commit --amend)?

Π•ΡΡ‚ΡŒ Π»ΠΈ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ΅ Π² практичСском ΠΏΠ»Π°Π½Π΅?

  • commit --amend для добавлСния Ρ„Π°ΠΉΠ»ΠΎΠ²/rm с самого послСднСго ΠΊΠΎΠΌΠΌΠΈΡ‚Π° ΠΈΠ»ΠΈ измСнСния Π΅Π³ΠΎ сообщСния.
  • reset --soft <commit> для объСдинСния Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π² ΠΎΠ΄ΠΈΠ½ Π½ΠΎΠ²Ρ‹ΠΉ.

И Ρ‡Ρ‚ΠΎ Π΅Ρ‰Π΅ Π±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΠΎ, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ способы использования reset --soft , ΠΊΡ€ΠΎΠΌΠ΅ внСсСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΠΊΠΎΠΌΠΌΠΈΡ‚?

  • Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ πŸ™‚

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ


Shaun Luttin Β  Β 

03 октября 2014 Π² 01:22



16

Π― ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ Π΅Π³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ большС, Ρ‡Π΅ΠΌ просто послСдний ΠΊΠΎΠΌΠΌΠΈΡ‚.

Допустим, я допустил ΠΎΡˆΠΈΠ±ΠΊΡƒ Π² ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅ A, Π° Π·Π°Ρ‚Π΅ΠΌ ΡΠΎΠ²Π΅Ρ€ΡˆΠΈΠ» ΠΊΠΎΠΌΠΌΠΈΡ‚ B. Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ я ΠΌΠΎΠ³Ρƒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ B.
Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ я git reset --soft HEAD^^ , я ΠΈΡΠΏΡ€Π°Π²Π»ΡΡŽ ΠΈ Π·Π°Π½ΠΎΠ²ΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ Π‘.

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, это Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ²… Π½ΠΎ Π²Ρ‹ всС Ρ€Π°Π²Π½ΠΎ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π΄Π΅Π»Π°Ρ‚ΡŒ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² πŸ˜‰

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ


Simon Β  Β 

06 ΠΌΠ°Ρ€Ρ‚Π° 2011 Π² 02:29



9

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ использования-это Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° Ρ‚Π°ΠΉΠ½ΠΈΠΊΡƒ (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ людям Π½Π΅ нравится, см., Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, https://codingkilledthecat.wordpress.com/2012/04/27/git-stash-pop-considered-harmful/ ).

НапримСр, Ссли я Ρ€Π°Π±ΠΎΡ‚Π°ΡŽ Π½Π° Π²Π΅Ρ‚ΠΊΠ΅ ΠΈ ΠΌΠ½Π΅ Π½ΡƒΠΆΠ½ΠΎ срочно Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π½Π° master, я ΠΌΠΎΠ³Ρƒ просто ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ:

git commit -am "In progress."

Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΠœΠ°ΡΡ‚Π΅Ρ€ ΠΈ сдСлайтС исправлСниС. Когда я Π·Π°ΠΊΠΎΠ½Ρ‡Ρƒ, я Π²Π΅Ρ€Π½ΡƒΡΡŒ Π² свою Π²Π΅Ρ‚Π²ΡŒ ΠΈ сдСлаю это.

git reset --soft HEAD~1

Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚Π°ΠΌ, Π³Π΄Π΅ я остановился.

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ


deltacrux Β  Β 

24 сСнтября 2015 Π² 06:25



6

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ git reset --soft для измСнСния вСрсии, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ Π² качСствС Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ для ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, внСсСнных Π² ваш индСкс ΠΈ Ρ€Π°Π±ΠΎΡ‡Π΅Π΅ Π΄Π΅Ρ€Π΅Π²ΠΎ. Π‘Π»ΡƒΡ‡Π°ΠΈ, ΠΊΠΎΠ³Π΄Π° это ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Ρ€Π΅Π΄ΠΊΠΈ. Иногда Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ измСнСния, внСсСнныС Π² вашС Ρ€Π°Π±ΠΎΡ‡Π΅Π΅ Π΄Π΅Ρ€Π΅Π²ΠΎ, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚ΡŒΡΡ ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²Π΅Ρ‚Π²ΠΈ. Или Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ это ΠΊΠ°ΠΊ простой способ ΡΠ²Π΅Ρ€Π½ΡƒΡ‚ΡŒ нСсколько ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π² ΠΎΠ΄ΠΈΠ½ (ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ squash/fold).

Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ этот ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° VonC для практичСского ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°:
Бквош ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Π΄Π²ΡƒΡ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π² Git?

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ


Johannes Rudolph Β  Β 

05 ΠΌΠ°Ρ€Ρ‚Π° 2011 Π² 11:40



6

Один ΠΈΠ· Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² использования-это ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ машинС. Π­Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:

  1. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ‚Π²ΡŒ с ΠΈΠΌΠ΅Π½Π΅ΠΌ, ΠΏΠΎΡ…ΠΎΠΆΠΈΠΌ Π½Π° Ρ‚Π°ΠΉΠ½ΠΈΠΊ,

    git checkout -b <branchname>_stash
    
  2. Π’ΠΎΠ»ΠΊΠ½ΠΈ свою Π·Π°Π½Π°Ρ‡ΠΊΡƒ Π²Π΅Ρ‚ΠΊΠΎΠΉ Π²Π²Π΅Ρ€Ρ…,

    git push -u origin <branchname>_stash
    
  3. ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ΡΡŒ Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΌΠ°ΡˆΠΈΠ½Ρƒ.

  4. ΠŸΠΎΡ‚ΡΠ½ΠΈΡ‚Π΅ Π²Π½ΠΈΠ· ΠΊΠ°ΠΊ ваш Ρ‚Π°ΠΉΠ½ΠΈΠΊ, Ρ‚Π°ΠΊ ΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π²Π΅Ρ‚Π²ΠΈ,

    git checkout <branchname>_stash; git checkout <branchname>
    
  5. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π½Π° вашСй ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠ΅. БлияниС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈΠ· Π²Π΅Ρ‚ΠΊΠΈ Ρ‚Π°ΠΉΠ½ΠΈΠΊΠ°,

    git merge <branchname>_stash
    
  6. Мягкий сброс ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Π²Π΅Ρ‚Π²ΠΈ Π΄ΠΎ 1 ΠΏΠ΅Ρ€Π΅Π΄ слияниСм,

    git reset --soft HEAD^
    
  7. Π£Π±Π΅Ρ€ΠΈΡ‚Π΅ свою Π·Π°Π½Π°Ρ‡ΠΊΡƒ Π²Π΅Ρ‚ΠΊΡƒ,

    git branch -d <branchname>_stash
    
  8. Π’Π°ΠΊΠΆΠ΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ свой Π·Π°Π½Π°Ρ‡ΠΊΡƒ Ρ„ΠΈΠ»ΠΈΠ°Π» ΠΎΡ‚ происхоТдСния,

    git push origin :<branchname>_stash
    
  9. ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΠΉΡ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ со своими измСнСниями, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ Π²Ρ‹ ΠΈΡ… ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ прятали.

Π― Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ GitHub ΠΈ ΠΊΠΎ. слСдуСт ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ «remote stash» Π² мСньшСм количСствС шагов.

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ


llaughlin Β  Β 

01 июля 2014 в 17:46



5

Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ‘ 27 ‘ — это ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ HEAD Π² Π³ΠΎΠ»ΠΎΠ΅ Π Π•ΠŸΠž.

Если Π²Ρ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ†ΠΈΡŽ --mixed ΠΈΠ»ΠΈ --hard , Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π²Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π΄Π΅Ρ€Π΅Π²ΠΎ ΠΈ/ΠΈΠ»ΠΈ индСкс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ сущСствуСт.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это нСпосрСдствСнно ΠΈΠ· Π³ΠΎΠ»ΠΎΠ³ΠΎ Π Π•ΠŸΠž.

Π•Ρ‰Π΅ Ρ€Π°Π· ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π²Π΅Ρ‚Π²ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠ±Ρ€ΠΎΡΠΈΡ‚ΡŒ Π² Π³ΠΎΠ»ΠΎΠΌ Π Π•ΠŸΠž, являСтся Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ Π²Π΅Ρ‚Π²ΡŒΡŽ. Если Π½Π΅Ρ‚, слСдуйтС ΠΎΡ‚Π²Π΅Ρ‚Ρƒ VonC ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π°ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ Π²Π΅Ρ‚Π²ΡŒ Π² Π³ΠΎΠ»ΠΎΠΌ Π Π•ΠŸΠž, ΠΊΠΎΠ³Π΄Π° Ρƒ вас Π΅ΡΡ‚ΡŒ прямой доступ ΠΊ Π Π•ΠŸΠž.

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ


Hazok Β  Β 

17 мая 2011 в 18:24



5

Одно практичСскоС ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΡƒΠΆΠ΅ взяли Π½Π° сСбя ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π° ΠΏΠΎ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ Π Π•ΠŸΠž (Ρ‚. Π΅. git commit-m) Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ эту послСднюю Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² git reset —soft HEAD ~1

Π’Π°ΠΊΠΆΠ΅ для вашСго знания, Ссли Π²Ρ‹ ΡƒΠΆΠ΅ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ свои измСнСния (Ρ‚. Π΅. с git add .) Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ постановку, сдСлав git reset —mixed HEAD ΠΈΠ»ΠΈ я ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ просто использовал git reset

Π½Π°ΠΊΠΎΠ½Π΅Ρ†, git reset —hard стираСт всС, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ваши Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ измСнСния. Π“ΠΎΠ»ΠΎΠ²Π° ~ after Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ Π²Π°ΠΌ, сколько ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ свСрху.

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ


j2emanue Β  Β 

21 фСвраля 2016 Π² 16:39



1

SourceTree — это git GUI, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ довольно ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ интСрфСйс для размСщСния Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅Ρ… Π±ΠΈΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅. Он Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΎΡ‚Π΄Π°Π»Π΅Π½Π½ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠ΅Π³ΠΎ для внСсСния ΠΏΠΎΠΏΡ€Π°Π²ΠΎΠΊ Π² Π½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΡƒΡŽ Ρ€Π΅Π΄Π°ΠΊΡ†ΠΈΡŽ.

Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ git reset --soft HEAD~1 Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΠΏΠΎΠ»Π΅Π·Π½Π΅Π΅, Ρ‡Π΅ΠΌ commit --amend Π² этом сцСнарии. Π― ΠΌΠΎΠ³Ρƒ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ, Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ всС измСнСния ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΈ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ настройку ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… Π±ΠΈΡ‚ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ SourceTree.

Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΌΠ½Π΅ каТСтся, Ρ‡Ρ‚ΠΎ commit --amend -это Π±ΠΎΠ»Π΅Π΅ избыточная ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈΠ· Π΄Π²ΡƒΡ…, Π½ΠΎ git — это git ΠΈ Π½Π΅ уклоняСтся ΠΎΡ‚ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅Π»Π°ΡŽΡ‚ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Π½Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ.

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ


Roman Starkov Β  Β 

15 июля 2014 в 00:33



0

Π₯отя ΠΌΠ½Π΅ ΠΎΡ‡Π΅Π½ΡŒ нравятся ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ Π² этой Ρ‚Π΅ΠΌΠ΅, я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ git reset --soft для Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ, Π½ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π½ΠΎΠ³ΠΎ сцСнария, Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅.

Π― ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ IDE для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, которая ΠΈΠΌΠ΅Π΅Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ инструмСнт diff для отобраТСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ (поэтапных ΠΈ нСстагнированных) послС ΠΌΠΎΠ΅ΠΉ послСднСй фиксации. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΌΠΎΠΈΡ… Π·Π°Π΄Π°Ρ‡ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя нСсколько ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ². НапримСр, допустим, я дСлаю 5 ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² для выполнСния ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ. Π― ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ инструмСнт diff Π² IDE Π²ΠΎ врСмя ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π½ΠΎΠΉ фиксации ΠΈΠ· 1-5, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° ΠΌΠΎΠΈ измСнСния с послСднСй фиксации. Π― ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ это ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ способ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΌΠΎΠΈ измСнСния ΠΏΠ΅Ρ€Π΅Π΄ фиксациСй.

Но Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΌΠΎΠ΅ΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΊΠΎΠ³Π΄Π° я Ρ…ΠΎΡ‡Ρƒ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ всС ΠΌΠΎΠΈ измСнСния вмСстС (Π΄ΠΎ 1-Π³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π°Π½Π°Π»ΠΈΠ· ΠΊΠΎΠ΄Π° ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ запроса Π½Π° вытягиваниС, я Π±ΡƒΠ΄Ρƒ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ измСнСния ΠΈΠ· ΠΌΠΎΠ΅Π³ΠΎ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° (послС ΠΊΠΎΠΌΠΌΠΈΡ‚Π° 4), Π° Π½Π΅ измСнСния ΠΈΠ· всСх ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² ΠΌΠΎΠ΅ΠΉ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ git reset --soft HEAD~4 , Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ 4 ΠΊΠΎΠΌΠΌΠΈΡ‚Π°ΠΌ. Π­Ρ‚ΠΎ позволяСт ΠΌΠ½Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ всС измСнСния вмСстС. Когда я ΡƒΠ²Π΅Ρ€Π΅Π½ Π² своих измСнСниях,я ΠΌΠΎΠ³Ρƒ Ρ‚ΠΎΠ³Π΄Π° ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ git reset HEAD@{1} ΠΈ ΡƒΠ²Π΅Ρ€Π΅Π½Π½ΠΎ Π½Π°ΠΆΠ°Ρ‚ΡŒ Π΅Π³ΠΎ Π½Π° ΠΏΡƒΠ»ΡŒΡ‚.

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ


Swanky Coder Β  Β 

04 июля 2018 в 01:52



0

Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования — ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Π²Π΅Ρ‚Π²ΡŒ Π½Π° свою Π² запросС pull, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, допустим, Ρ‡Ρ‚ΠΎ Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС с функциями A, B, C Π² Development.

Π’Ρ‹ Ρ€Π°Π·Π²ΠΈΠ²Π°Π΅Ρ‚Π΅ΡΡŒ со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ вСрсиСй ΠΈ Π²Ρ‹:

Π’ процСссС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ исправлСния для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ B.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Development Π² next, Π½ΠΎ это ΠΈΠ½ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСприятно, Π½ΠΎ Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ git reset --soft origin/develop ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚ с вашими измСнСниями, ΠΈ Π²Π΅Ρ‚Π²ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π±Π΅Π· ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ваши измСнСния.

ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ git reset --soft -это удобная ΠΊΠΎΠΌΠ°Π½Π΄Π°. Π― Π»ΠΈΡ‡Π½ΠΎ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ Π΅Π³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Π΄Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ «completed work», ΠΊΠ°ΠΊ «WIP», поэтому, ΠΊΠΎΠ³Π΄Π° я ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽ запрос pull, всС ΠΌΠΎΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ понятны.

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ


cnexans Β  Β 

23 января 2019 Π² 12:54


ΠŸΠΎΡ…ΠΎΠΆΠΈΠ΅ вопросы:

Π˜Π½Π²Π΅Ρ€ΡΠΈΡ git reset —soft

git reset —soft сохранит ваши Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ измСнСния,Π½ΠΎ пСрСмСстит HEAD Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ. Π― ΠΈΡ‰Ρƒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ HEAD оставался Π½Π΅ΠΏΠΎΠ΄Π²ΠΈΠΆΠ½Ρ‹ΠΌ, Π½ΠΎ состояниС всСх Ρ„Π°ΠΉΠ»ΠΎΠ² Π±Ρ‹Π»ΠΎ Π±Ρ‹ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π²…

Когда Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ git reset —soft?

Когда Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ git reset —soft? Π― ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ git сброс —ТСсткий всС врСмя, Π½ΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ каТСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ случай, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ сброс git —мягкий.

Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ git reset —soft ΠΈ git reset

Π’ Ρ‡Π΅ΠΌ ΠΆΠ΅ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ git reset —soft origin/dev ΠΈ git reset origin/dev НадСюсь, это Π½Π΅ такая ΡƒΠΆ большая Ρ€Π°Π·Π½ΠΈΡ†Π°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ я ΠΌΠΎΠ³ просто случайно Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΈΡΠΏΠΎΡ€Ρ‚ΠΈΡ‚ΡŒ.

Π˜Π·ΠΌΠ΅Π½ΡΠ΅Ρ‚ Π»ΠΈ git reset —soft Ρ‚ΠΎΠ»ΡŒΠΊΠΎ значСния hash?

Π’ этом постС Π°Π²Ρ‚ΠΎΡ€ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ 3 Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° сброса git (мягкий, ΡΠΌΠ΅ΡˆΠ°Π½Π½Ρ‹ΠΉ, ТСсткий): https://www.atlassian.com/git/tutorials/undoing-changes/git-reset Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ three trees Π² качСствС…

ЯвляСтся Π»ΠΈ’ git reset —soft ‘ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ no-op?

Π’ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ говорится, Ρ‡Ρ‚ΠΎ использованиС ΠΎΠΏΡ†ΠΈΠΈ —soft …НС касаСтся Π½ΠΈ индСксного Ρ„Π°ΠΉΠ»Π°, Π½ΠΈ Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ Π΄Π΅Ρ€Π΅Π²Π° Π²ΠΎΠΎΠ±Ρ‰Π΅, Π½ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ Π² Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΌ порядкС. Π­Ρ‚ΠΎ оставляСт всС ваши…

Π—Π°Ρ‡Π΅ΠΌ явно Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ git reset —soft ΠΏΠ΅Ρ€Π΅Π΄ git reset (—mixed)

Π’ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ… git (ΠΈ многочислСнных ΠΏΠΎΡ‚ΠΎΠΊΠ°Ρ… SO) рСкомСндуСтся этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ сброса: $ git reset —soft HEAD^ ;# go back to WIP state <2> $ git reset <3> . 2. Π­Ρ‚ΠΎ удаляСт Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ WIP ΠΈΠ·…

Как ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ git reset —soft, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΌΠΎΠΈ измСнСния?

Π£ мСня Π±Ρ‹Π»ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ измСнСния Π² ΠΌΠΎΠ΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я зафиксировал с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ git commit. ПозТС я понял, Ρ‡Ρ‚ΠΎ ΠΏΠΎ ошибкС ΠΌΠΎΠΈ измСнСния сломали мою сборку. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ я сдСлал git reset…

git rebase <tag> / git reset —soft <tag> Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

Π― ΠΎΠΆΠΈΠ΄Π°Π», Ρ‡Ρ‚ΠΎ git reset —soft ΠΈΠ»ΠΈ git rebase раздавят нСсколько ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π² ΠΎΠ΄ΠΈΠ½, Π½ΠΎ Π² ΠΌΠΎΠ΅ΠΌ случаС это Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Π£ мСня Π΅ΡΡ‚ΡŒ этот сцСнарий bash. Он ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для извлСчСния Π²Π΅Ρ‚Π²ΠΈ ΠΈΠ·…

Как быстро «exit» git soft reset?

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ я Ρ€Π΅ΡˆΠΈΠ» Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ Π½Π° ΠΏΠ°Ρ€Ρƒ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π½Π°Π·Π°Π΄, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π΅ состояниС. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ я дСлаю это: git reset —soft {commit_hash} Π•ΡΡ‚ΡŒ Π»ΠΈ способ быстро Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ послСдним измСнСниям,…

Как `git pull —rebase ‘отличаСтся ΠΎΡ‚’ git reset —soft origin/b`

Π― ΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ ΠΏΠΎΠ½ΡΡ‚ΡŒ git pull —rebase …Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это, ΠΊΠ°ΠΊ эта ΠΊΠΎΠΌΠ°Π½Π΄Π° отличаСтся ΠΎΡ‚: git fetch origin git reset —soft remotes/origin/foo git add . git commit -am bar git merge remotes/origin/foo…

для Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ фиксации

ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка

  1. Около
  2. ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹

  3. Для ΠΊΠΎΠΌΠ°Π½Π΄
  1. ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка
    ΠžΠ±Ρ‰Π΅ΡΡ‚Π²Π΅Π½Π½Ρ‹Π΅ вопросы ΠΈ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹

  2. ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка для ΠΊΠΎΠΌΠ°Π½Π΄
    Π“Π΄Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈ дСлятся частными знаниями с ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌΠΈ

  3. Вакансии
    ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ связанныС с Π½ΠΈΠΌ тСхничСскиС возмоТности ΠΊΠ°Ρ€ΡŒΠ΅Ρ€Π½ΠΎΠ³ΠΎ роста

  4. Π’Π°Π»Π°Π½Ρ‚
    НанимайтС тСхничСских спСциалистов ΠΈ создавайтС свой Π±Ρ€Π΅Π½Π΄ работодатСля

  5. Π Π΅ΠΊΠ»Π°ΠΌΠ°
    ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³Π°ΠΌ со всСго ΠΌΠΈΡ€Π°

  6. О компании

.

Как ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Β«git resetΒ»?

ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка

  1. Около
  2. ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹

  3. Для ΠΊΠΎΠΌΠ°Π½Π΄
  1. ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка
    ΠžΠ±Ρ‰Π΅ΡΡ‚Π²Π΅Π½Π½Ρ‹Π΅ вопросы ΠΈ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹

  2. ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка для ΠΊΠΎΠΌΠ°Π½Π΄
    Π“Π΄Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈ дСлятся частными знаниями с ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌΠΈ

  3. Вакансии
    ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ связанныС с Π½ΠΈΠΌ тСхничСскиС возмоТности ΠΊΠ°Ρ€ΡŒΠ΅Ρ€Π½ΠΎΠ³ΠΎ роста

  4. Π’Π°Π»Π°Π½Ρ‚
    НанимайтС тСхничСских спСциалистов ΠΈ создавайтС свой Π±Ρ€Π΅Π½Π΄ работодатСля

  5. Π Π΅ΠΊΠ»Π°ΠΌΠ°
    ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³Π°ΠΌ со всСго ΠΌΠΈΡ€Π°

  6. О компании

.

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

Команда git reset — это слоТный ΠΈ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ инструмСнт для ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. Π£ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ основных Ρ„ΠΎΡ€ΠΌΡ‹ призывания. Π­Ρ‚ΠΈ Ρ„ΠΎΡ€ΠΌΡ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки --soft, --mixed, --hard . ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Ρ‚Ρ€Π΅Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² соотвСтствуСт Ρ‚Ρ€Π΅ΠΌ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°ΠΌ управлСния состояниСм Git: Π΄Π΅Ρ€Π΅Π²Ρƒ фиксации ( HEAD ), ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠΌΡƒ индСксу ΠΈ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌΡƒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Ρƒ.

Git Reset ΠΈ Ρ‚Ρ€ΠΈ Π΄Π΅Ρ€Π΅Π²Π° Git

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ использованиС git reset , ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ сначала ΠΏΠΎΠ½ΡΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ систСму управлСния состояниСм Git.Иногда эти ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ «трСмя Π΄Π΅Ρ€Π΅Π²ΡŒΡΠΌΠΈΒ» Git. Π”Π΅Ρ€Π΅Π²ΡŒΡ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ строго Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΌΠΈ Π΄Ρ€Π΅Π²ΠΎΠ²ΠΈΠ΄Π½Ρ‹ΠΌΠΈ структурами Π΄Π°Π½Π½Ρ‹Ρ…. Однако ΠΎΠ½ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой структуры Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° основС ΡƒΠ·Π»ΠΎΠ² ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Git ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ для отслСТивания Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡˆΠΊΠ°Π»Ρ‹ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. Π›ΡƒΡ‡ΡˆΠΈΠΉ способ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ эти ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ — ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½Π°Π±ΠΎΡ€ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΠΈ ΠΏΡ€ΠΎΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° Π½ΠΈΠΌ ΠΏΠΎ Ρ‚Ρ€Π΅ΠΌ Π΄Π΅Ρ€Π΅Π²ΡŒΡΠΌ.

Для Π½Π°Ρ‡Π°Π»Π° создадим Π½ΠΎΠ²Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄:

  $ mkdir git_reset_test $ cd git_reset_test / $ git init.Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ пустой Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Git Π² /git_reset_test/.git/ $ touch reset_lifecycle_file $ git add reset_lifecycle_file $ git commit -m "initial commit" [master (root-commit) d386d86] Π½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ фиксация 1 Ρ„Π°ΠΉΠ» ΠΈΠ·ΠΌΠ΅Π½Π΅Π½, 0 вставок (+), 0 ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΉ (-) Ρ€Π΅ΠΆΠΈΠΌ создания 100644 reset_lifecycle_file  

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΊΠΎΠ΄Π° создаСтся Π½ΠΎΠ²Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ git с ΠΎΠ΄Π½ΠΈΠΌ пустым Ρ„Π°ΠΉΠ»ΠΎΠΌ reset_lifecycle_file . На этом этапС Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΈΠΌΠ΅Π΅Ρ‚ Π΅Π΄ΠΈΠ½ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ ( d386d86 ) ΠΎΡ‚ добавлСния reset_lifecycle_file .

Π Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³

ΠŸΠ΅Ρ€Π²ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ рассмотрим, это Β«Π Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Β». Π­Ρ‚ΠΎ Π΄Π΅Ρ€Π΅Π²ΠΎ синхронизируСтся с локальной Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмой ΠΈ ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹Π΅ измСнСния, вносимыС Π² содСрТимоС Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ².

 
 

$ echo 'hello git reset'> reset_lifecycle_file
$ git status
На Π³Π»Π°Π²Π½ΠΎΠΌ сСрвСрС Π²Π΅Ρ‚ΠΊΠΈ
ИзмСнСния, Π½Π΅ поставлСнныС для фиксации:
(ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Β«git add ...Β», Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ зафиксировано)
(ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Β«git checkout - ... ", Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ измСнСния Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅)
ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ: reset_lifecycle_file

Π’ нашСм дСмонстрационном Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΠΌΡ‹ измСняСм ΠΈ добавляСм Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ Π² Ρ„Π°ΠΉΠ» reset_lifecycle_file . Π’Ρ‹Π·ΠΎΠ² git status ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Git Π·Π½Π°Π΅Ρ‚ ΠΎΠ± измСнСниях Π² Ρ„Π°ΠΉΠ»Π΅. Π­Ρ‚ΠΈ измСнСния Π² настоящСС врСмя ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π΄Π΅Ρ€Π΅Π²Π° Β«Π Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Β». Git status ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для отобраТСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅. Они Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ красным Ρ†Π²Π΅Ρ‚ΠΎΠΌ с прСфиксом Β«ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹ΠΉΒ».

ΠŸΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ индСкс

Π”Π°Π»Π΅Π΅ ΠΈΠ΄Π΅Ρ‚ Π΄Π΅Ρ€Π΅Π²ΠΎ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ индСкса. Π­Ρ‚ΠΎ Π΄Π΅Ρ€Π΅Π²ΠΎ отслСТиваСт измСнСния Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ git add , для сохранСния Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅. Π­Ρ‚ΠΎ Π΄Π΅Ρ€Π΅Π²ΠΎ прСдставляСт собой слоТный ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ. Git ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ пытаСтся ΡΠΊΡ€Ρ‹Ρ‚ΡŒ Π΄Π΅Ρ‚Π°Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ индСкса ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

Для Ρ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ просмотра состояния ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ индСкса ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Π½Π΅Π΅ ΠΈΠ·Π²Π΅ΡΡ‚Π½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Git git ls-files . Команда git ls-files ΠΏΠΎ сути являСтся ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΎΠΉ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ состояния Π΄Π΅Ρ€Π΅Π²Π° ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ индСкса.

  git ls-files -s 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 reset_lifecycle_file  

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ git ls-files с ΠΎΠΏΡ†ΠΈΠ΅ΠΉ -s ΠΈΠ»ΠΈ --stage. Π‘Π΅Π· ΠΎΠΏΡ†ΠΈΠΈ -s Π²Ρ‹Π²ΠΎΠ΄ git ls-files прСдставляСт собой просто список ΠΈΠΌΠ΅Π½ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ ΠΏΡƒΡ‚Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² настоящСС врСмя ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ индСкса. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ -s ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ для Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠΌ индСксС. Π­Ρ‚ΠΈ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой Π±ΠΈΡ‚Ρ‹ Ρ€Π΅ΠΆΠΈΠΌΠ° поэтапного содСрТимого, имя ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ Π½ΠΎΠΌΠ΅Ρ€ этапа.Π—Π΄Π΅ΡΡŒ нас интСрСсуСт имя ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π²Ρ‚ΠΎΡ€ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ( d7d77c1b04b5edd5acfc85de0b592449e5303770 ). Π­Ρ‚ΠΎ стандартный Ρ…ΡΡˆ SHA-1 ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Git. Π­Ρ‚ΠΎ Ρ…Π΅Ρˆ содСрТимого Ρ„Π°ΠΉΠ»ΠΎΠ². Π˜ΡΡ‚ΠΎΡ€ΠΈΡ фиксации Ρ…Ρ€Π°Π½ΠΈΡ‚ свои собствСнныС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ SHA для опрСдСлСния ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° фиксации ΠΈ ссылки, Π° ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ индСкс ΠΈΠΌΠ΅Π΅Ρ‚ свои собствСнныС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ SHA для отслСТивания вСрсий Ρ„Π°ΠΉΠ»ΠΎΠ² Π² индСксС.

Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ reset_lifecycle_file Π² индСкс ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ уровня.

 
 

$ git add reset_lifecycle_file

$ git status

На Π³Π»Π°Π²Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅ ИзмСнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ:

(ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ "git reset HEAD... "ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ сцСну)

ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ: reset_lifecycle_file

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Π²Ρ‹Π·Π²Π°Π»ΠΈ git add reset_lifecycle_file , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ добавляСт Ρ„Π°ΠΉΠ» Π² ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ индСкс. ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ git status Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ reset_lifecycle_file отобраТаСтся Π·Π΅Π»Π΅Π½Ρ‹ΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ «ИзмСнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΒ». Π’Π°ΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ git status Π½Π΅ являСтся истинным прСдставлСниСм ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ индСкса. Π’Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git status ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ измСнСния ΠΌΠ΅ΠΆΠ΄Ρƒ историСй фиксации ΠΈ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ индСксом.Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ исслСдуСм содСрТаниС ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ индСкса.

  $ GIT LS-Ρ„Π°ΠΉΠ»ΠΎΠ² -s 100644 d7d77c1b04b5edd5acfc85de0b592449e5303770 0 reset_lifecycle_file  

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ША для reset_lifecycle_file Π±Ρ‹Π» ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ с e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 Π΄ΠΎ d7d77c1b04b5edd5acfc85de0b592449e5303770 .

Π˜ΡΡ‚ΠΎΡ€ΠΈΡ фиксации

ПослСднСС Π΄Π΅Ρ€Π΅Π²ΠΎ - это история фиксации. Команда git commit добавляСт измСнСния Π² постоянный снимок, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ хранится Π² истории фиксации.Π­Ρ‚ΠΎΡ‚ снимок Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ состояниС ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ индСкса Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ фиксации.

  $ git commit -am "ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ содСрТимоС reset_lifecycle_file" [master dc67808] ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ содСрТимоС Ρ„Π°ΠΉΠ»Π° reset_lifecycle_file 1 ΠΈΠ·ΠΌΠ΅Π½Π΅Π½, 1 вставка (+) $ git status На мастСрС Π²Π΅Ρ‚ΠΊΠΈ Π½Π΅Ρ‡Π΅Π³ΠΎ Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ€Π°Π±ΠΎΡ‡Π΅Π΅ Π΄Π΅Ρ€Π΅Π²ΠΎ ΠΎΡ‡ΠΈΡ‰Π΅Π½ΠΎ  

Π—Π΄Π΅ΡΡŒ Ρƒ нас Π΅ΡΡ‚ΡŒ создал Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ с сообщСниСм Β«ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ содСрТимоС Ρ„Π°ΠΉΠ»Π° resetlifecyclefileΒ» . Набор ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π±Ρ‹Π» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π² ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ фиксации. Π’Ρ‹Π·ΠΎΠ² git status Π½Π° этом этапС ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½Π΅Ρ‚ ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π½ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π².Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ git log ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ фиксации. Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ прослСдили этот Π½Π°Π±ΠΎΡ€ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΏΠΎ Ρ‚Ρ€Π΅ΠΌ Π΄Π΅Ρ€Π΅Π²ΡŒΡΠΌ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ git reset .

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

На повСрхностном ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ git reset ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ git checkout . Если git checkout Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ с ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ HEAD ref, git reset ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ HEAD ref ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ссылки Π²Π΅Ρ‚ΠΊΠΈ.Π§Ρ‚ΠΎΠ±Ρ‹ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ дСмонстрируСт ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π½Π° Π²Π΅Ρ‚Π²ΠΈ master . HEAD ref ΠΈ master branch ref Π² настоящСС врСмя ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ d. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ ΠΈ сравним ΠΊΠ°ΠΊ git checkout b , Ρ‚Π°ΠΊ ΠΈ git reset b.

git checkout b

Π‘ git checkout , master ref всС Π΅Ρ‰Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° d . HEAD ref Π±Ρ‹Π» ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ b .Π Π΅ΠΏΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ находится Π² состоянии Β« HEAD Β».

git ΡΠ±Ρ€ΠΎΡΠΈΡ‚ΡŒ b

Для сравнСния: git reset ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΠΊΠ°ΠΊ HEAD , Ρ‚Π°ΠΊ ΠΈ ссылки Π²Π΅Ρ‚ΠΊΠΈ Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ.

Помимо обновлСния ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ ссылок Π½Π° Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ, git reset ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ состояниС Ρ‚Ρ€Π΅Ρ… Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π². ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ указатСля ref всСгда происходит ΠΈ являСтся ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ Π΄Π΅Ρ€Π΅Π²Π°, Π΄Π΅Ρ€Π΅Π²Π° фиксации. АргумСнты ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки --soft, --mixed ΠΈ --hard ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚, ΠΊΠ°ΠΊ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ индСкс ΠΈ Π΄Π΅Ρ€Π΅Π²ΡŒΡ Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π²Ρ‹Π·ΠΎΠ² git reset ΠΈΠΌΠ΅Π΅Ρ‚ нСявныС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ - ΡΠΌΠ΅ΡˆΠ°Π½Π½Ρ‹Π΅ ΠΈ HEAD . Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ git reset эквивалСнтно Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ git reset --mixed HEAD . Π’ этой Ρ„ΠΎΡ€ΠΌΠ΅ HEAD - это указанная фиксация. ВмСсто HEAD ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ любой Ρ…ΡΡˆ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° Git SHA-1.

- Ρ‚Π²Π΅Ρ€Π΄Ρ‹ΠΉ

Π­Ρ‚ΠΎ самый прямой, ΠžΠŸΠΠ‘ΠΠ«Π™ ΠΈ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚.ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ --hard Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ссылки истории фиксации ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‚ΡΡ Π΄ΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ фиксации. Π—Π°Ρ‚Π΅ΠΌ индСкс ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ хранСния ΠΈ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΡΠ±Ρ€Π°ΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² соотвСтствии с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠΌ. Π›ΡŽΠ±Ρ‹Π΅ Ρ€Π°Π½Π΅Π΅ ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΠ΅ измСнСния Π² ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠΌ индСксС ΠΈ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ ΡΠ±Ρ€Π°ΡΡ‹Π²Π°ΡŽΡ‚ΡΡ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ Π΄Π΅Ρ€Π΅Π²Π° фиксации. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ любая Π½Π΅Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½Π°Ρ Ρ€Π°Π±ΠΎΡ‚Π°, которая висСла Π² ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠΌ индСксС ΠΈ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, Π±ΡƒΠ΄Π΅Ρ‚ потСряна.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Ρƒ с Ρ€Π΅ΠΏΠΎ ΠΈΠ· Ρ‚Ρ€Π΅Ρ… Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π², ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ создали Ρ€Π°Π½Π΅Π΅.Π‘Π½Π°Ρ‡Π°Π»Π° внСсСм Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ измСнСния Π² Ρ€Π΅ΠΏΠΎ. Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°:

  $ echo 'Π½ΠΎΠ²ΠΎΠ΅ содСрТимоС Ρ„Π°ΠΉΠ»Π°'> new_file $ git add new_file $ echo 'ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΠΎΠ΅ содСрТимоС' >> reset_lifecycle_file  

Π­Ρ‚ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ создали Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ new_file ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ это Π² Ρ€Π΅ΠΏΠΎ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, содСрТимоС reset_lifecycle_file Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ. Π‘ этими измСнСниями Π΄Π°Π²Π°ΠΉΡ‚Π΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ исслСдуСм состояниС Ρ€Π΅ΠΏΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ git status .

  $ git status Π’ мастСрС Π²Π΅Ρ‚ΠΊΠΈ ИзмСнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ: (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Β«git reset HEAD ...Β» для ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ постановки) Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ»: new_file ИзмСнСния, Π½Π΅ поставлСнныС для фиксации: (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Β«git add ...Β», Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΠΎ) (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ "git checkout - ...", Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ измСнСния Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅) ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ: reset_lifecycle_file  

ΠœΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² Ρ€Π΅ΠΏΠΎ Π΅ΡΡ‚ΡŒ ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ измСнСния. Π’ Π΄Π΅Ρ€Π΅Π²Π΅ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ индСкса Π΅ΡΡ‚ΡŒ ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΠ΅ измСнСния для добавлСния new_file , Π° Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ Π΅ΡΡ‚ΡŒ ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΠ΅ измСнСния для ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΉ reset_lifecycle_file .

ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ дальшС, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ состояниС индСкса ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ уровня:

  $ git ls-files -s 100644 8e66654a5477b1bf4765946147c49509a431f963 0 new_file 100644 d7d77c1b04b5edd5acfile2000 

. ΠœΡ‹ ΠΎΠ±Π½ΠΎΠ²ΠΈΠ»ΠΈ reset_lifecycle_file , Π½ΠΎ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ индСкс SHA ( d7d77c1b04b5edd5acfc85de0b592449e5303770 ) остался ΠΏΡ€Π΅ΠΆΠ½ΠΈΠΌ.Π­Ρ‚ΠΎ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π½Π΅ использовалось git add для продвиТСния этих ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ индСкс. Π­Ρ‚ΠΈ измСнСния ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅.

Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ git reset --hard ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ Π½ΠΎΠ²ΠΎΠ΅ состояниС рСпозитория.

  $ git reset --hard HEAD Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ находится Π½Π° dc67808 ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ содСрТимоС reset_lifecycle_file $ git status На Π³Π»Π°Π²Π½ΠΎΠΌ сСрвСрС Π½Π΅Ρ‡Π΅Π³ΠΎ Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ€Π°Π±ΠΎΡ‡Π΅Π΅ Π΄Π΅Ρ€Π΅Π²ΠΎ ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ $ git ls-files -s 100644 d7d77c1b04b5edd5acfc85de0b592449e5303770 0 reset_lifecycle_file 9000
 

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ «ТСсткий сброс» с использованиСм ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° --hard .Git ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ, Ρ‡Ρ‚ΠΎ HEAD ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° послСднюю Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ dc67808 . Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ провСряСм состояниС Ρ€Π΅ΠΏΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ git status . Git ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π½Π΅Ρ‚. ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ провСряСм состояниС индСкса ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ уровня ΠΈ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π±Ρ‹Π» ΡΠ±Ρ€ΠΎΡˆΠ΅Π½ Π΄ΠΎ Ρ‚ΠΎΡ‡ΠΊΠΈ Π΄ΠΎ добавлСния new_file . Наши ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ reset_lifecycle_file ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ new_file Π±Ρ‹Π»ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½Ρ‹. Π­Ρ‚Ρƒ ΠΏΠΎΡ‚Π΅Ρ€ΡŽ Π΄Π°Π½Π½Ρ‹Ρ… нСльзя ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ, это ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ ΠΊ свСдСнию.

- ΡΠΌΠ΅ΡˆΠ°Π½Π½Ρ‹ΠΉ

Π­Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ Ρ€Π΅ΠΆΠΈΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ref ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ‹. ИндСкс ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ хранСния сбрасываСтся Π΄ΠΎ состояния ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ фиксации. Π›ΡŽΠ±Ρ‹Π΅ измСнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ ΠΎΡ‚ΠΌΠ΅Π½Π΅Π½Ρ‹ ΠΈΠ· ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ индСкса, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ.

  $ echo 'Π½ΠΎΠ²ΠΎΠ΅ содСрТимоС Ρ„Π°ΠΉΠ»Π°'> new_file $ git add new_file $ echo 'append content' >> reset_lifecycle_file $ git add reset_lifecycle_file $ git status На Π³Π»Π°Π²Π½ΠΎΠΌ сСрвСрС Π²Π΅Ρ‚ΠΊΠΈ ИзмСнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ: (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ "git reset HEAD... "для Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ) Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ»: Π½ΠΎΠ²Ρ‹ΠΉ_Ρ„Π°ΠΉΠ» ΠΈΠ·ΠΌΠ΅Π½Π΅Π½: reset_lifecycle_file $ git ls-files -s 100644 8e66654a5477b1bf4765946147c49509a431f963 0 Π½ΠΎΠ²Ρ‹ΠΉ_Ρ„Π°ΠΉΠ» 100644 7ab362db063f9e94262c00a3394b4be
 

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ внСсли Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ измСнСния Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ. Π‘Π½ΠΎΠ²Π° ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ new_file ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ содСрТимоС reset_lifecycle_file . Π—Π°Ρ‚Π΅ΠΌ эти измСнСния ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΊ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠΌΡƒ индСксу с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ git add . Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Ρ€Π΅ΠΏΠΎ находится Π² этом состоянии, ΠΌΡ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ сброс.

  $ git reset --mixed $ git status Π’ мастСрС Π²Π΅Ρ‚ΠΊΠΈ ИзмСнСния, Π½Π΅ поставлСнныС для фиксации: (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Β«git add ...Β», Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ зафиксировано) (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Β«git checkout - ...Β», Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ измСнСния Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅) ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ: reset_lifecycle_file НС отслСТиваСмыС Ρ„Π°ΠΉΠ»Ρ‹: (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ "git add ...", Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ зафиксировано) new_file измСнСния Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π² Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ "git add" ΠΈ / ΠΈΠ»ΠΈ "git commit -a") $ git ls-files -s 100644 d7d77c1b04b5edd5acfc85de0b592449e5303770 0 reset_lifecycle_file  

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ Β«ΡΠΌΠ΅ΡˆΠ°Π½Π½Ρ‹ΠΉ сброс».ΠŸΠΎΠ²Ρ‚ΠΎΡ€ΡŽΡΡŒ, --mixed - это Ρ€Π΅ΠΆΠΈΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ эффСкт, Ρ‡Ρ‚ΠΎ ΠΈ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ git reset . Π˜Π·ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… git status ΠΈ git ls-files ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ индСкс ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ уровня Π±Ρ‹Π» ΡΠ±Ρ€ΠΎΡˆΠ΅Π½ Π΄ΠΎ состояния, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ reset_lifecycle_file являСтся СдинствСнным Ρ„Π°ΠΉΠ»ΠΎΠΌ Π² индСксС. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ SHA для reset_lifecycle_file Π±Ρ‹Π» ΡΠ±Ρ€ΠΎΡˆΠ΅Π½ Π΄ΠΎ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ вСрсии.

Π—Π΄Π΅ΡΡŒ Π²Π°ΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ git status ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π°ΠΌ, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ измСнСния Π² reset_lifecycle_file ΠΈ Π΅ΡΡ‚ΡŒ нСотслСТиваСмый Ρ„Π°ΠΉΠ»: new_file .Π­Ρ‚ΠΎ явноС ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ - смСшанноС . ΠŸΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ индСкс Π±Ρ‹Π» ΡΠ±Ρ€ΠΎΡˆΠ΅Π½, Π° ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΠ΅ измСнСния Π±Ρ‹Π»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½Ρ‹ Π² Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³. Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅ это со случаСм сброса --hard , ΠΊΠΎΠ³Π΄Π° индСкс ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ уровня Π±Ρ‹Π» ΡΠ±Ρ€ΠΎΡˆΠ΅Π½, Π° Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Ρ‚Π°ΠΊΠΆΠ΅ Π±Ρ‹Π» ΡΠ±Ρ€ΠΎΡˆΠ΅Π½, ΠΈ эти обновлСния Π±Ρ‹Π»ΠΈ потСряны.

- мягкий

Когда пСрСдаСтся Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ --soft , ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ref ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‚ΡΡ, ΠΈ Π½Π° этом сброс останавливаСтся. ΠŸΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ индСкс ΠΈ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π½Π΅Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚Ρ‹ΠΌΠΈ.Π’Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Ρ‡Π΅Ρ‚ΠΊΠΎ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ нашС дСмонстрационноС Ρ€Π΅ΠΏΠΎ ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΠΌ Π΅Π³ΠΎ ΠΊ мягкому сбросу.

 
 

$ git add reset_lifecycle_file

$ git ls-files -s

100644 67cc52710639e5da6b515416fd779d0741e3762e 0 reset_lifecycle_file

$ git status

"Π‘Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ

Π½Π°

Π½Π° Π³Π»Π°Π²Π½ΠΎΠΌ сСрвСрС Π²Π΅Ρ‚ΠΊΠΈ

. unstage)

ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ: reset_lifecycle_file

Π€Π°ΠΉΠ»Ρ‹ Π±Π΅Π· отслСТивания:

(ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ "git add... "Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΠΎ)

new_file

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ снова использовали git add для продвиТСния ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ reset_lifecycle_file Π² индСкс ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ уровня. ΠœΡ‹ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ индСкс Π±Ρ‹Π» ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ с Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ git ls-files . Π’ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… git status Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ отобраТаСтся Π·Π΅Π»Π΅Π½Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚ «ИзмСнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΒ». new_file ΠΈΠ· Π½Π°ΡˆΠΈΡ… ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² находится Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ ΠΊΠ°ΠΊ нСотслСТиваСмый Ρ„Π°ΠΉΠ».Π”Π°Π²Π°ΠΉΡ‚Π΅ быстро Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ rm new_file , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ», Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ Π½Π°ΠΌ Π½Π΅ понадобится Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ….

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ находится Π² этом состоянии, ΠΌΡ‹ выполняСм ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ сброс.

  $ git reset --soft $ git status На Π³Π»Π°Π²Π½ΠΎΠΌ сСрвСрС Π²Π΅Ρ‚ΠΊΠΈ ИзмСнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ: (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ "git reset HEAD ..." для ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ) ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ: reset_lifecycle_file $ git ls-files -s 100644 67cc52710639e5da6b515416fd779d0741e37cycle_23e reset_life60006
 

ΠœΡ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ «мягкий сброс».Π˜Π·ΡƒΡ‡Π΅Π½ΠΈΠ΅ состояния Ρ€Π΅ΠΏΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ git status ΠΈ git ls-files ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ измСнилось. Π­Ρ‚ΠΎ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅. Мягкий сброс ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ сбросу Ρ‚ΠΎΠ»ΡŒΠΊΠΎ истории фиксации. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ вызываСтся git reset с HEAD Π² качСствС Ρ†Π΅Π»Π΅Π²ΠΎΠΉ фиксации. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ наша история фиксации ΡƒΠΆΠ΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΠ»Π°ΡΡŒ Π½Π° HEAD , ΠΈ ΠΌΡ‹ нСявно сбросили Π΄ΠΎ HEAD , Π½Π° самом Π΄Π΅Π»Π΅ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ.

Π§Ρ‚ΠΎΠ±Ρ‹ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ --soft , Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚, ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΎΡ‚ HEAD .Π£ нас Π΅ΡΡ‚ΡŒ reset_lifecycle_file , ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΡ… Π² индСксС ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ хранСния. Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚.

  $ git commit -m "Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ содСрТимоС Π² reset_lifecycle_file"  

На этом этапС Π² нашСм Ρ€Π΅ΠΏΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Ρ‚Ρ€ΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°. ΠœΡ‹ вСрнСмся Π½Π°Π·Π°Π΄ ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρƒ. Для этого Π½Π°ΠΌ понадобится ID ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ, просмотрСв Π²Ρ‹Π²ΠΎΠ΄ git log .

  $ git log commit 62e793f6941c7e0d4ad9a1345a175fe8f45cb9df Автор: bitbucket Π”Π°Ρ‚Π°: 1 дСкабря, пятница, 15:03:07 2017 -0800 Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ содСрТимоС Π² Ρ„Π°ΠΉΠ» reset_lifecycle_file commit dc67808a6da9f0dec51ed16d3dda_file_file_commit 780411da3b47117270c0e3a8d5dcfd11d28d04a4 Автор: bitbucket Π”Π°Ρ‚Π°: Π§Ρ‚, 30 ноября, 16:50:39 2017 -0800 Π½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ фиксация  

Π˜ΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ истории фиксации Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ систСмы.Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ фиксации Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅ Π½Π° своСм ΠΏΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅. Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ фиксации, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ нас интСрСсуСт Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, - 780411da3b47117270c0e3a8d5dcfd11d28d04a4 . Π­Ρ‚ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Β«Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ фиксации». Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΡ‹ Π½Π°ΠΉΠ΄Π΅ΠΌ этот ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² качСствС Ρ†Π΅Π»ΠΈ для нашСго ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ сброса.

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒΡΡ Π² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠ΅, Π΄Π°Π²Π°ΠΉΡ‚Π΅ сначала ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС Ρ€Π΅ΠΏΠΎ.

  $ git status && git ls-files -s На мастСрС Π²Π΅Ρ‚ΠΊΠΈ Π½Π΅Ρ‡Π΅Π³ΠΎ Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ€Π°Π±ΠΎΡ‡Π΅Π΅ Π΄Π΅Ρ€Π΅Π²ΠΎ ΠΎΡ‡ΠΈΡ‰Π΅Π½ΠΎ 100644 67cc52710639e5da6b515416fd779d0741e3762e 0 reset_lifecycle_file  

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ выполняСм ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ² git status ΠΈ . это ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π°ΠΌ, Ρ‡Ρ‚ΠΎ Π² Ρ€Π΅ΠΏΠΎ Π΅ΡΡ‚ΡŒ Π½Π΅Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½Ρ‹Π΅ измСнСния, Π° reset_lifecycle_file Π² ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠΌ индСксС ΠΈΠΌΠ΅Π΅Ρ‚ Π²Π΅Ρ€ΡΠΈΡŽ 67cc52710639e5da6b515416fd779d0741e3762e .ИмСя это Π² Π²ΠΈΠ΄Ρƒ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ мягкий сброс Π΄ΠΎ нашСй ΠΏΠ΅Ρ€Π²ΠΎΠΉ фиксации.

  $ git reset --soft 780411da3b47117270c0e3a8d5dcfd11d28d04a4 $ git status && git ls-files -s Π’ Π³Π»Π°Π²Π½ΠΎΠΌ ΡƒΠ·Π»Π΅ Π²Π΅Ρ‚ΠΊΠΈ ИзмСнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ: (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Β«git reset HEAD ...Β» для ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ постановки) ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ: reset_lifecycle_file 9646396e3e3e07e08e06e6e6e6e6e7e07e6e07e6e6e6e07ec5e /
 

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄ выполняСт «мягкий сброс», Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git status ΠΈ git ls-files , которая Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ состояниС рСпозитория.ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ состояния Ρ€Π΅ΠΏΠΎ ΠΈ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ интСрСсныС наблюдСния. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, git status ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² reset_lifecycle_file ΠΈ выдСляСт ΠΈΡ…, указывая Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ это измСнСния, ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½Ρ‹Π΅ для ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ фиксации. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, Π²Π²ΠΎΠ΄ git ls-files ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ индСкс ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ уровня Π½Π΅ измСнился ΠΈ сохранил Ρ€Π°Π½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ SHA 67cc52710639e5da6b515416fd779d0741e3762e.

Π§Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡΡΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ ΠΏΡ€ΠΈ этом сбросС, Π΄Π°Π²Π°ΠΉΡ‚Π΅ исслСдуСм ΠΆΡƒΡ€Π½Π°Π» git :

  $ git log commit 780411da3b47117270c0e3a8d5dcfd11d28d04a4 Автор: bitbucket Π”Π°Ρ‚Π°: Π§Ρ‚, 30 ноября, 16:50:39, , Π½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ фиксация  log Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π² истории фиксаций Π΅ΡΡ‚ΡŒ ΠΎΠ΄Π½Π° фиксация.Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ наглядно ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ сдСлал  - soft . Как ΠΈ Π²ΠΎ всСх Π²Ρ‹Π·ΠΎΠ²Π°Ρ…  git reset , ΠΏΠ΅Ρ€Π²ΠΎΠ΅ дСйствиС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ выполняСт сброс, - это ΡΠ±Ρ€ΠΎΡΠΈΡ‚ΡŒ Π΄Π΅Ρ€Π΅Π²ΠΎ фиксации. Наши ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ с  --hard  ΠΈ  --mixed  Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΎΡ‚ΠΈΠ²  HEAD  ΠΈ Π½Π΅ Π²Π΅Ρ€Π½ΡƒΠ»ΠΈ Π΄Π΅Ρ€Π΅Π²ΠΎ фиксации Π½Π°Π·Π°Π΄ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π­Ρ‚ΠΎ всС, Ρ‡Ρ‚ΠΎ происходит Π²ΠΎ врСмя мягкого сброса. 

Π’ΠΎΠ³Π΄Π° это ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ±ΠΈΠ²Π°Ρ‚ΡŒ с Ρ‚ΠΎΠ»ΠΊΡƒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ git status ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ². --soft Π½Π΅ Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ индСкс, поэтому обновлСния нашСго ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ индСкса слСдовали Π·Π° Π½Π°ΠΌΠΈ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ‡Π΅Ρ€Π΅Π· ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ фиксации. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΎ Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ git ls-files -s , ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌ, Ρ‡Ρ‚ΠΎ SHA для reset_lifecycle_file Π½Π΅ измСнился. НапоминаСм, Ρ‡Ρ‚ΠΎ git status Π½Π΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ состояниС Β«Ρ‚Ρ€Π΅Ρ… Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π²Β», ΠΎΠ½ ΠΏΠΎ сущСству ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ. Π’ этом случаС отобраТаСтся, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ индСкс ΠΎΠΏΠ΅Ρ€Π΅ΠΆΠ°Π΅Ρ‚ измСнСния Π² истории фиксации, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ ΠΌΡ‹ ΠΈΡ… ΡƒΠΆΠ΅ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΠ»ΠΈ.

Бброс ΠΏΡ€ΠΎΡ‚ΠΈΠ² Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π°

Если git revert являСтся «бСзопасным» способом ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ git reset ΠΊΠ°ΠΊ опасный ΠΌΠ΅Ρ‚ΠΎΠ΄. Π•ΡΡ‚ΡŒ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ риск ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ с git reset . Git reset Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΡΡ‚Π°Ρ‚ΡŒ Β«ΠΎΡΠΈΡ€ΠΎΡ‚Π΅Π²ΡˆΠΈΠΌΠΈΒ», Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ отсутствиС прямого ΠΏΡƒΡ‚ΠΈ ΠΎΡ‚ ссылки для доступа ΠΊ Π½ΠΈΠΌ. Π­Ρ‚ΠΈ потСрянныС ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΈ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ git reflog . Git навсСгда ΡƒΠ΄Π°Π»ΠΈΡ‚ всС потСрянныС ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ послС запуска Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ сборщика мусора.По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Git настроСн Π½Π° запуск сборщика мусора ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ 30 Π΄Π½Π΅ΠΉ. Π˜ΡΡ‚ΠΎΡ€ΠΈΡ фиксации - ΠΎΠ΄Π½ΠΎ ΠΈΠ· Β«Ρ‚Ρ€Π΅Ρ… Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π² gitΒ», Π΄Π²Π° Π΄Ρ€ΡƒΠ³ΠΈΡ…, ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ индСкс ΠΈ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Π½Π΅ Ρ‚Π°ΠΊ постоянны, ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹. Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΡΠΎΠ±Π»ΡŽΠ΄Π°Ρ‚ΡŒ ΠΎΡΡ‚ΠΎΡ€ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈ использовании этого инструмСнта, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это ΠΎΠ΄Π½Π° ΠΈΠ· Π½Π΅ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄ Git, которая ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΏΠΎΡ‚Π΅Ρ€Π΅ вашСй Ρ€Π°Π±ΠΎΡ‚Ρ‹.

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

НС ΡΠ±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰Π΅Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΡƒΡŽ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ

Никогда Π½Π΅ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ git reset , Ссли ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ снимки послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π±Ρ‹Π»ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Ρ‹ Π² общСдоступный Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ. ПослС ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ фиксации Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π½Π° Π½Π΅Π΅.

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ фиксации, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π»ΠΈ Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‡Π»Π΅Π½Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, создаСт ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ для совмСстной Ρ€Π°Π±ΠΎΡ‚Ρ‹.Когда ΠΎΠ½ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ с вашим Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅ΠΌ, это Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ Ρ‡Π°ΡΡ‚ΡŒ истории ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π²Π½Π΅Π·Π°ΠΏΠ½ΠΎ исчСзла. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Π°Ρ Π½ΠΈΠΆΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ дСмонстрируСт, Ρ‡Ρ‚ΠΎ происходит, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΡΠ±Ρ€ΠΎΡΠΈΡ‚ΡŒ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΡƒΡŽ Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ. Π’Π΅Ρ‚Π²ΡŒ origin / master - это вСрсия Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ рСпозитория вашСй локальной Π²Π΅Ρ‚ΠΊΠΈ master .

Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ послС сброса, Git ΠΏΠΎΠ΄ΡƒΠΌΠ°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ваша локальная история отличаСтся ΠΎΡ‚ origin / master , ΠΈ фиксация слияния, нСобходимая для синхронизации Π²Π°ΡˆΠΈΡ… Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π², скорСС всСго, Π·Π°ΠΏΡƒΡ‚Π°Π΅Ρ‚ ΠΈ расстроит Π²Π°ΡˆΡƒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ.

Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ git reset для локального экспСримСнта, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ ΠΏΡ€ΠΎΡˆΠ΅Π», Π° Π½Π΅ для ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΡƒΡŽ Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ, ΠΊΠΎΠΌΠ°Π½Π΄Π° git revert Π±Ρ‹Π»Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ для этой Ρ†Π΅Π»ΠΈ.

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

  git reset  

Π£Π΄Π°Π»ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΈΠ· ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠΉ области, Π½ΠΎ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. Π­Ρ‚ΠΎ Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ„Π°ΠΉΠ» Π±Π΅Π· пСрСзаписи ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.

  git reset  

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

  git reset --hard  

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

  git reset  

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚Π΅ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ Π½Π°Π·Π°Π΄ Π½Π° commit , ΡΠ±Ρ€ΠΎΡΡŒΡ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π² соотвСтствиС, Π½ΠΎ ΠΎΡΡ‚Π°Π²ΡŒΡ‚Π΅ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Π² ΠΏΠΎΠΊΠΎΠ΅. ВсС измСнСния, внСсСнныС с , Π±ΡƒΠ΄ΡƒΡ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π·Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π±ΠΎΠ»Π΅Π΅ чистыС ΠΈ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹Π΅ снимки.

  git reset --hard  

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

ДСактивация Ρ„Π°ΠΉΠ»Π°

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

  # ΠžΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ hello.py ΠΈ main.py # ΠŸΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚Π΅ всС Π² Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ git add. # ΠŸΠΎΠΉΠΌΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ измСнСния Π² ΠΏΡ€ΠΈΠ²Π΅Ρ‚.py ΠΈ main.py # Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ зафиксированы Π² Ρ€Π°Π·Π½Ρ‹Ρ… снимках # Unstage main.py git reset main.py # Π—Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ hello.py git commit -m "ВнСсти Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ измСнСния Π² hello.py" # Π—Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ main.py Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ снимкС git add main.py git commit -m "Edit main.py"  

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, git reset ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΡΡ„ΠΎΠΊΡƒΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° Π²Π°ΡˆΠΈΡ… ΠΊΠΎΠΌΠΌΠΈΡ‚Π°Ρ…, позволяя ΠΎΡ‚ΠΌΠ΅Π½ΡΡ‚ΡŒ измСнСния, Π½Π΅ связанныС со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠΌ.

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ²

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ Π±ΠΎΠ»Π΅Π΅ слоТный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ использования.Он дСмонстрируСт, Ρ‡Ρ‚ΠΎ происходит, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Π½Π°Π΄ Π½ΠΎΠ²Ρ‹ΠΌ экспСримСнтом, Π½ΠΎ Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π²Ρ‹Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ Π΅Π³ΠΎ послС ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… снимков.

  # Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ `foo.py` ΠΈ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π² Π½Π΅Π³ΠΎ ΠΊΠΎΠ΄ # ЗафиксируйтС Π΅Π³ΠΎ Π² истории ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° git add foo.py git commit -m" ΠΠ°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π±Π΅Π·ΡƒΠΌΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ "# ΠžΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅` foo.py` снова ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ отслСТиваСмыС Ρ„Π°ΠΉΠ»Ρ‹ # ЗафиксируйтС Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ снимок git commit -a -m "ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ мою ΡΡƒΠΌΠ°ΡΡˆΠ΅Π΄ΡˆΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ" # Π Π΅ΡˆΠΈΡ‚Π΅ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ связанныС ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ git reset --hard HEAD ~ 2  

git Команда reset HEAD ~ 2 ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ Π½Π°Π·Π°Π΄ Π½Π° Π΄Π²Π΅ фиксации, эффСктивно удаляя Π΄Π²Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ созданных снимка ΠΈΠ· истории ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠΉ сброс слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π½Π΅ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ². Никогда Π½Π΅ выполняйтС ΠΎΠΏΠΈΡΠ°Π½Π½ΡƒΡŽ Π²Ρ‹ΡˆΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ, Ссли Π²Ρ‹ ΡƒΠΆΠ΅ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠ»ΠΈ свои ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π² ΠΎΠ±Ρ‰ΠΈΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ.

РСзюмС

Напомним, Ρ‡Ρ‚ΠΎ git reset - мощная ΠΊΠΎΠΌΠ°Π½Π΄Π°, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ состояния рСпозитория Git. Бброс Git Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° Β«Π’Ρ€Π΅Ρ… Π΄Π΅Ρ€Π΅Π²ΡŒΡΡ… GitΒ». Π­Ρ‚ΠΈΠΌΠΈ Π΄Π΅Ρ€Π΅Π²ΡŒΡΠΌΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ история фиксации ( HEAD ), ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ индСкс ΠΈ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³. Π•ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚Ρ€Π΅ΠΌ Π΄Π΅Ρ€Π΅Π²ΡŒΡΠΌ.ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ --soft, --mixed ΠΈ --hard ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Ρ‹ Π² git reset .

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ использовали нСсколько Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄ Git, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ процСссы сброса. Π£Π·Π½Π°ΠΉΡ‚Π΅ большС ΠΎΠ± этих ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ… Π½Π° ΠΈΡ… ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… страницах: git status, git log, git add, git checkout, git reflog, ΠΈ git revert .

.

git-сброс (1)

Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ… Π½ΠΈΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, Ρ‡Ρ‚ΠΎ происходит ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅:

  git reset --option target  

для сброса HEAD Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ ( target ) с Π΄Ρ€ΡƒΠ³ΠΈΠΌ
ΡΠ±Ρ€ΠΎΡΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π² зависимости ΠΎΡ‚ состояния Ρ„Π°ΠΉΠ»ΠΎΠ².

Π’ этих Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ… A , B , C ΠΈ D - это Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π·Π½Ρ‹Π΅ состояния
Ρ„Π°ΠΉΠ». НапримСр, пСрвая строка ΠΏΠ΅Ρ€Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ссли
Ρ„Π°ΠΉΠ» находится Π² состоянии A Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ Π΄Π΅Ρ€Π΅Π²Π΅, Π² состоянии B Π² индСксС, Π²
состояниС C Π² HEAD ΠΈ Π² состоянии D Π² Ρ†Π΅Π»ΠΈ, Π·Π°Ρ‚Π΅ΠΌ git reset --soft
Ρ†Π΅Π»ΡŒ
оставит Ρ„Π°ΠΉΠ» Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ Π΄Π΅Ρ€Π΅Π²Π΅ Π² состоянии A ΠΈ Π²
индСкс Π² состоянии Π‘ .Он сбрасываСт (Ρ‚. Π•. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚) HEAD (Ρ‚. Π•. ΠšΠΎΠ½Ρ‡ΠΈΠΊ
тСкущая Π²Π΅Ρ‚ΠΊΠ°, Ссли Π²Ρ‹ Π² ΠΎΠ΄Π½ΠΎΠΉ) Π½Π° Ρ†Π΅Π»ΡŒ (Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π΅ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ»
Π² состоянии D ).

  Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ индСкс HEAD Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ индСкс HEAD
-------------------------------------------------- -
 A B C D - мягкая A B D
                          - ΡΠΌΠ΅ΡˆΠ°Π½Π½Ρ‹ΠΉ A D D
                          - ТСсткий D D D
                          --merge (Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ)
                          --keep (Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ)  
  Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ индСкс HEAD Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ индСкс HEAD
-------------------------------------------------- -
 A B C C - мягкая A B C
                          - ΡΠΌΠ΅ΡˆΠ°Π½Π½Ρ‹ΠΉ A C C
                          - ТСсткий C C C
                          --merge (Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ)
                          - ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ A C C  
  Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ индСкс HEAD Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ индСкс HEAD
-------------------------------------------------- -
 B B C D - мягкий B B D
                          - ΡΠΌΠ΅ΡˆΠ°Π½Π½Ρ‹ΠΉ B D D
                          - ТСсткий D D D
                          - ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ D D D
                          --keep (Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ)  
  Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ индСкс HEAD Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ индСкс HEAD
-------------------------------------------------- -
 B B C C - мягкий B B C
                          - ΡΠΌΠ΅ΡˆΠ°Π½Π½Ρ‹ΠΉ B C C
                          - ТСсткий C C C
                          - ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ C C C
                          - Π₯Ρ€Π°Π½ΠΈΡ‚ΡŒ B C C  
  Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ индСкс HEAD Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ индСкс HEAD
-------------------------------------------------- -
 B C C D - мягкая B C D
                          - ΡΠΌΠ΅ΡˆΠ°Π½Π½Ρ‹ΠΉ B D D
                          - ТСсткий D D D
                          --merge (Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ)
                          --keep (Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ)  
  Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ индСкс HEAD Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ индСкс HEAD
-------------------------------------------------- -
 B C C C - мягкая B C C
                          - ΡΠΌΠ΅ΡˆΠ°Π½Π½Ρ‹ΠΉ B C C
                          - ТСсткий C C C
                          - ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ B C C
                          - содСрТаниС B C C  

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

reset --keep ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для использования ΠΏΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠ· послСдних
фиксируСтся Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠ΅, сохраняя измСнСния Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ
Π΄Π΅Ρ€Π΅Π²ΠΎ. Если Π±Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ измСнСниями Π² ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹, ΠΌΡ‹
Ρ…ΠΎΡ‚ΠΈΠΌ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ, ΠΈ измСнСния Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ Π΄Π΅Ρ€Π΅Π²Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ,
сброс Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½. Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ это Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ, Ссли Π΅ΡΡ‚ΡŒ ΠΎΠ±Π°
измСнСния ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌ Π΄Π΅Ρ€Π΅Π²ΠΎΠΌ ΠΈ HEAD , Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ HEAD ΠΈ
Ρ†Π΅Π»ΡŒ.На всякий случай Ρ‚Π°ΠΊΠΆΠ΅ Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° Π΅ΡΡ‚ΡŒ Π½Π΅ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Π½Ρ‹Π΅
записи.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ… ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, Ρ‡Ρ‚ΠΎ происходит, ΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Ρ‹
записСй:

  Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ индСкс HEAD Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ индСкс HEAD
-------------------------------------------------- -
 X U A B - мягкий (Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ)
                          - ΡΠΌΠ΅ΡˆΠ°Π½Π½Ρ‹ΠΉ X B B
                          - ТСсткий B B B
                          - слияниС B B B
                          --keep (Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ)  
  Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ индСкс HEAD Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ индСкс HEAD
-------------------------------------------------- -
 X U A A - мягкоС (Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ)
                          - ΡΠΌΠ΅ΡˆΠ°Π½Π½Ρ‹ΠΉ X A A
                          - ТСсткий А А А
                          - ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ A A A
                          --keep (Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ)  

X ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ любоС состояниС, Π° U ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π½Π΅ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Π½Ρ‹ΠΉ индСкс.

.

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

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