π ΠΠ°ΠΊ ΠΎΡΠΌΠ΅Π½ΠΈΡΡ 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 ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ΡΠ²Π½ΡΠΌ ΠΈ ΠΏΡΠ³Π°ΡΡΠΈΠΌ ΠΌΠΎΠΌΠ΅Π½ΡΠΎΠΌ, Π½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡΠ΅, ΡΡΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ ΡΠΏΠΎΡΠΎΠ±Ρ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΠΎΡΠ΅ΡΡΠ½Π½ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ. ΠΠΎΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ²:
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ git reflog Π΄Π»Ρ Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ Ρ ΡΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π΄ΠΎ git checkout ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ git checkout Ρ ΡΡΠΈΠΌ Ρ ΡΡΠ΅ΠΌ.
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ git fsck, ΡΡΠΎΠ±Ρ Π½Π°ΠΉΡΠΈ ΠΏΠΎΡΠ΅ΡΡΠ½Π½ΡΠ΅ ΠΊΠΎΠΌΠΌΠΈΡΡ, ΠΈ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΈΠ· Π½ΠΈΡ .
- ΠΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΈΠ· ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ git checkout ΠΈ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΏΡΡΠΈ ΠΈ ΠΊΠΎΠΌΠΌΠΈΡΠ°.
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ git stash Π΄Π»Ρ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈ ΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ.
Π ΠΏΠΎΠΌΠ½ΠΈΡΠ΅, ΡΡΠΎ Git ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠΎΡΠ½ΡΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π²Π΅ΡΡΠΈΡΠΌΠΈ, ΠΈ Π΅Π³ΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΏΠΎΡΠ΅ΡΠΈ Π΄Π°Π½Π½ΡΡ ΠΈ ΡΠΏΡΠΎΡΡΠΈΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ.