πŸ”„ Как ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ git checkout: Π»Π΅Π³ΠΊΠΈΠΉ способ ΠΎΡ‚ΠΌΠ΅Π½Ρ‹

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ "git checkout", Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ "git reflog", Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ Ρ…ΡΡˆ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ. Π—Π°Ρ‚Π΅ΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ "git checkout <Ρ…ΡΡˆ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°>" для ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π½Π° этот ΠΊΠΎΠΌΠΌΠΈΡ‚. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

        $ git reflog
        <Ρ…ΡΡˆ1> HEAD@{0}: checkout: moving from branch_A to branch_B
        <Ρ…ΡΡˆ2> HEAD@{1}: commit: Fix bug in feature_X
        <Ρ…ΡΡˆ3> HEAD@{2}: checkout: moving from branch_C to branch_A
        <Ρ…ΡΡˆ4> HEAD@{3}: commit: Implement feature_X
        ...
        $ git checkout <Ρ…ΡΡˆ2>
    

Π”Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚

Как ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ git checkout

git checkout - это ΠΊΠΎΠΌΠ°Π½Π΄Π° Π² систСмС контроля вСрсий Git, которая позволяСт ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Π²Π΅Ρ‚ΠΊΠ°ΠΌΠΈ ΠΈΠ»ΠΈ Π²ΠΎΡΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ· рСпозитория. Однако, Ссли Π²Ρ‹ случайно Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ git checkout ΠΈ потСряСтС измСнСния Π² вашСм ΠΊΠΎΠ΄Π΅, Π½Π΅ ΠΏΠ°Π½ΠΈΠΊΡƒΠΉΡ‚Π΅! Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ нСсколько способов ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ git checkout ΠΈ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ потСрянныС измСнСния.

1. ΠžΡ‚ΠΌΠ΅Π½Π° git checkout с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ git reflog

Git сохраняСт ΠΆΡƒΡ€Π½Π°Π» всСх Π²Π°ΡˆΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ git checkout, Π² своСй Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git reflog для просмотра списка всСх Π²Π°ΡˆΠΈΡ… дСйствий.


$ git reflog

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ список всСх Π²Π°ΡˆΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git checkout. КаТдая ΠΊΠΎΠΌΠ°Π½Π΄Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ…ΡΡˆ, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ HEAD@{1} ΠΈΠ»ΠΈ HEAD@{2}.

Π§Ρ‚ΠΎΠ±Ρ‹ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ Π΄ΠΎ git checkout, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git checkout, ΡƒΠΊΠ°Π·Π°Π² Ρ…ΡΡˆ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π΄ΠΎ git checkout.


$ git checkout HEAD@{1}

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ Π²Π΅Ρ€Π½ΡƒΠ»ΠΈΡΡŒ ΠΊ ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ Π΄ΠΎ git checkout ΠΈ ваши измСнСния Π² ΠΊΠΎΠ΄Π΅ восстановлСны.

2. ΠžΡ‚ΠΌΠ΅Π½Π° git checkout с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ git fsck

Если Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ Ρ…ΡΡˆ Π² git reflog, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ измСнСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git fsck. Git fsck сканируСт Π²Π°ΡˆΡƒ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… Git ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ всС "утСрянныС" ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹.


$ git fsck --lost-found

ПослС выполнСния этой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ .git появится новая ΠΏΠ°ΠΏΠΊΠ° .git/lost-found, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±ΡƒΠ΄ΡƒΡ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Ρ„Π°ΠΉΠ»Ρ‹, относящиСся ΠΊ "утСрянным" ΠΊΠΎΠΌΠΌΠΈΡ‚Π°ΠΌ. Π’Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ содСрТимоС этих Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ Π½Π°ΠΉΡ‚ΠΈ измСнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ потСряли.

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π½ΡƒΠΆΠ½Ρ‹Π΅ измСнСния, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° Π½Π΅Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git branch ΠΈ git checkout.

3. ВосстановлСниС Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ· рСпозитория

Если ваши измСнСния Π±Ρ‹Π»ΠΈ сохранСны ΠΈ зафиксированы Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git checkout с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΏΡƒΡ‚ΠΈ Ρ„Π°ΠΉΠ»Π° ΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ.


$ git checkout <commit> -- <path/to/file>

Π—Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ <commit> Π½Π° Ρ…ΡΡˆ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° ΠΈ <path/to/file> Π½Π° ΠΏΡƒΡ‚ΡŒ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ. ПослС выполнСния этой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Ρ„Π°ΠΉΠ» Π±ΡƒΠ΄Π΅Ρ‚ восстановлСн Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ.

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

Если Π²Ρ‹ Π΅Ρ‰Π΅ Π½Π΅ зафиксировали измСнСния Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, Π½ΠΎ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈΡ…, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git stash. Git stash сохраняСт Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ измСнСния Π² ΡΡ‚ΡΡˆΠ΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅.


$ git stash save "Temporary changes"

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ваши измСнСния сохранСны, ΠΈ ваш Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ вСрнулся ΠΊ ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ Π΄ΠΎ git checkout. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ ΠΈΠ»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ дСйствия, ΠΈ ваш сохранСнный ΡΡ‚ΡΡˆ Π±ΡƒΠ΄Π΅Ρ‚ доступСн для восстановлСния ΠΏΠΎΠ·ΠΆΠ΅.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ сохранСнныС измСнСния ΠΈΠ· ΡΡ‚ΡΡˆΠ°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git stash apply. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ сохранСнныС измСнСния, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git stash drop.

Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ΠžΡ‚ΠΌΠ΅Π½Π° git checkout ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅Ρ€Π²Π½Ρ‹ΠΌ ΠΈ ΠΏΡƒΠ³Π°ΡŽΡ‰ΠΈΠΌ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠΌ, Π½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ способы Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ потСрянныС измСнСния. Π’ΠΎΡ‚ нСсколько способов:

  1. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ git reflog для нахоТдСния Ρ…ΡΡˆΠ° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π΄ΠΎ git checkout ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ git checkout с этим Ρ…ΡΡˆΠ΅ΠΌ.
  2. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ git fsck, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ потСрянныС ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, ΠΈ восстановитС измСнСния ΠΈΠ· Π½ΠΈΡ….
  3. ВосстановитС Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ· рСпозитория с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git checkout ΠΈ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΏΡƒΡ‚ΠΈ ΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°.
  4. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ git stash для Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ сохранСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈ ΠΈΡ… ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ восстановлСния.

И ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Git являСтся ΠΌΠΎΡ‰Π½Ρ‹ΠΌ инструмСнтом управлСния вСрсиями, ΠΈ Π΅Π³ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ использованиС ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΡ‚Π΅Ρ€ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ упростит Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния.

Π’ΠΈΠ΄Π΅ΠΎ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅

5.1 Git - Reset - ЖСсткий reset --hard: ΠΎΡ‚ΠΌΠ΅Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ²

РазбираСмся ΠΊΠ°ΠΊ Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠΎ ΠΊΠΎΠΌΠΈΡ‚Ρ‚Π°ΠΌ git: checkout

3.3 Git - Π’Π΅Ρ‚ΠΊΠΈ - Команда checkout ΠΏΡ€ΠΈ Π½Π΅Π·Π°ΠΊΠΎΠΌΠΌΠΈΡ‡Π΅Π½Π½Ρ‹Ρ… измСнСниях

ΠŸΠΎΡ…ΠΎΠΆΠΈΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ:

git reset: Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΈ ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ?

πŸ”„ Как ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ git checkout: Π»Π΅Π³ΠΊΠΈΠΉ способ ΠΎΡ‚ΠΌΠ΅Π½Ρ‹

Как ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ Π²Π΅Ρ‚ΠΊΠΈ git? 🌿 Π‘Π°ΠΌΡ‹ΠΉ простой способ