Git Reset vs. Git Checkout vs. Git Revert: ΠΠΎΠ»Π½ΠΎΠ΅ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ
ΠΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΠ°Π·Π½ΠΈΡΡ ΠΌΠ΅ΠΆΠ΄Ρ git reset, git checkout ΠΈ git revert Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ, ΡΠ°Π±ΠΎΡΠ°ΡΡΠ΅ΠΌΡ Ρ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π²Π΅ΡΡΠΈΠΉ. ΠΡΠ»ΠΈ ΠΊΡΠ°ΡΠΊΠΎ: git reset ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΠΈΡΡΠΎΡΠΈΡ, ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ HEAD; git checkout ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ Π²Π΅ΡΠΊΠ°ΠΌΠΈ, ΠΊΠΎΠΌΠΌΠΈΡΠ°ΠΌΠΈ ΠΈΠ»ΠΈ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΈΡΡΠΎΡΠΈΠΈ; Π° git revert ΠΎΡΠΌΠ΅Π½ΡΠ΅Ρ ΠΊΠΎΠΌΠΌΠΈΡ, ΡΠΎΠ·Π΄Π°Π²Π°Ρ Π½ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ°ΡΠ½ΡΠΉ ΠΊΠΎΠΌΠΌΠΈΡ, ΠΎΡΡΠ°Π²Π»ΡΡ ΠΈΡΡΠΎΡΠΈΡ Π½Π΅ΡΡΠΎΠ½ΡΡΠΎΠΉ. ΠΡΠ±ΠΎΡ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ β ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π² ΠΎΠ±ΡΠ΅ΠΉ Π²Π΅ΡΠΊΠ΅ β ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ²ΡΠ΅Π΄ΠΈΡΡ ΠΈΡΡΠΎΡΠΈΡ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ² Π²Π°ΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΈΠ»ΠΈ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ Π±Π΅Π·Π²ΠΎΠ·Π²ΡΠ°ΡΠ½ΠΎΠΉ ΠΏΠΎΡΠ΅ΡΠ΅ Π΄Π°Π½Π½ΡΡ
.
ΠΡΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ Π²ΡΡ ΠΎΠ΄ΠΈΡ Π·Π° ΡΠ°ΠΌΠΊΠΈ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° ΠΈ ΠΎΠ±ΡΡΡΠ½ΡΠ΅Ρ Π²Π½ΡΡΡΠ΅Π½Π½ΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠΊΡ Git, ΡΠΎΡΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π²Π°ΡΠ΅Π³ΠΎ ΡΠ°Π±ΠΎΡΠ΅Π³ΠΎ Π΄Π΅ΡΠ΅Π²Π° ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠ° ΠΏΠΎΡΠ»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ΅Π°Π»ΡΠ½ΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΈ, Π² ΠΊΠΎΡΠΎΡΡΡ ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌ (ΠΈΠ»ΠΈ ΠΊΠ°ΡΠ°ΡΡΡΠΎΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅Π²Π΅ΡΠ½ΡΠΌ) Π²ΡΠ±ΠΎΡΠΎΠΌ.
ΠΠ°ΠΊ Git ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ΠΌ: ΡΡΠΈ Π΄Π΅ΡΠ΅Π²Π°
ΠΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ° ΡΡΡΠΊΠ°Ρ ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½Π°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Git ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅. Git ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π° ΡΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΡΠΎΠ²Π½ΡΡ :
- Π Π°Π±ΠΎΡΠΈΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ β ΡΠ°ΠΉΠ»Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ Π²ΠΈΠ΄ΠΈΡΠ΅ ΠΈ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° Π΄ΠΈΡΠΊΠ΅.
- ΠΠ±Π»Π°ΡΡΡ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠΈ (ΠΈΠ½Π΄Π΅ΠΊΡ) β ΡΠ½ΠΈΠΌΠΎΠΊ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π²ΠΎΠΉΠ΄ΡΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠΌΠΌΠΈΡ.
- ΠΡΡΠΎΡΠΈΡ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ² (HEAD) β ΡΠ΅ΠΏΠΎΡΠΊΠ° Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΡ
ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ², Ρ
ΡΠ°Π½ΡΡΠΈΡ
ΡΡ Π²
.git/.
ΠΠ°ΠΆΠ΄Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΎΡΠΌΠ΅Π½Ρ Π² Git Π²ΠΎΠ·Π΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠ· ΡΡΠΈΡ
ΡΡΠΎΠ²Π½Π΅ΠΉ. ΠΡΡΠ°Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ reset, checkout ΠΈ revert ΠΏΠΎΡΡΠΈ Π²ΡΠ΅Π³Π΄Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΈΠ·-Π·Π° Π½Π΅Π·Π½Π°Π½ΠΈΡ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ ΡΡΠΎΠ²Π½ΠΈ Π·Π°ΡΡΠ°Π³ΠΈΠ²Π°Π΅Ρ ΡΠ° ΠΈΠ»ΠΈ ΠΈΠ½Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°.
git reset: ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΈΡΡΠΎΡΠΈΠΈ
git reset ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ HEAD ΡΠ΅ΠΊΡΡΠ΅ΠΉ Π²Π΅ΡΠΊΠΈ Π½Π° ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠΈΡ. Π Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ»Π°Π³Π° ΡΠ΅ΠΆΠΈΠΌΠ° ΠΎΠ½ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΈ ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³. ΠΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΠΈ ΠΈΡΡΠΎΡΠΈΠΈ, ΠΈ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Ρ --hard Π΅Ρ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΡΠΈΡΠ°ΡΡ Π΄Π΅ΡΡΡΡΠΊΡΠΈΠ²Π½ΠΎΠΉ.
ΠΠ±ΡΡΡΠ½Π΅Π½ΠΈΠ΅ ΡΠ΅ΠΆΠΈΠΌΠΎΠ² ΡΠ±ΡΠΎΡΠ°
git reset --soft <commit> # Move HEAD only; index and working tree unchanged
git reset --mixed <commit> # Move HEAD + reset index; working tree unchanged (default)
git reset --hard <commit> # Move HEAD + reset index + reset working tree| Π Π΅ΠΆΠΈΠΌ | HEAD ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΡΡΡ | Π‘Π±ΡΠΎΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ° | Π‘Π±ΡΠΎΡ ΡΠ°Π±ΠΎΡΠ΅Π³ΠΎ Π΄Π΅ΡΠ΅Π²Π° | ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΎΡ ΡΠ°Π½ΡΡΡΡΡ |
|---|---|---|---|---|
--soft | ΠΠ° | ΠΠ΅Ρ | ΠΠ΅Ρ | ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π½ΡΠ΅ ΠΈ Π½Π΅ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π½ΡΠ΅ |
--mixed | ΠΠ° | ΠΠ° | ΠΠ΅Ρ | Π’ΠΎΠ»ΡΠΊΠΎ Π½Π΅ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π½ΡΠ΅ |
--hard | ΠΠ° | ΠΠ° | ΠΠ° | ΠΠ΅Ρ β Π±Π΅Π·Π²ΠΎΠ·Π²ΡΠ°ΡΠ½ΠΎ ΡΡΠ΅ΡΡΠ½Ρ |
ΠΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ
ΠΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ² ΠΏΠ΅ΡΠ΅Π΄ ΠΎΡΠΏΡΠ°Π²ΠΊΠΎΠΉ. ΠΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ ΡΡΠΈ Π½Π΅Π·Π°Π²Π΅ΡΡΡΠ½Π½ΡΡ
ΡΠ°Π±ΠΎΡΠΈΡ
ΠΊΠΎΠΌΠΌΠΈΡΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ Π΅ΡΡ Π½Π΅ Π±ΡΠ»ΠΈ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½Ρ, git reset --soft HEAD~3 ΡΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅Ρ ΠΈΡ
ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π² ΠΈΠ½Π΄Π΅ΠΊΡ, ΡΡΠΎΠ±Ρ Π²Ρ ΠΌΠΎΠ³Π»ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΡΠΉ ΠΊΠΎΠΌΠΌΠΈΡ Π² Π²ΠΈΠ΄Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΈΡΡΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡΠ°.
ΠΡΠΌΠ΅Π½Π° ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠΈ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°. ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ git reset HEAD <file> (ΠΈΠ»ΠΈ git reset Π±Π΅Π· ΡΡΡΠ»ΠΊΠΈ Π½Π° ΠΊΠΎΠΌΠΌΠΈΡ) ΡΠ΄Π°Π»ΡΠ΅Ρ ΡΠ°ΠΉΠ» ΠΈΠ· ΠΈΠ½Π΄Π΅ΠΊΡΠ°, Π½Π΅ Π·Π°ΡΡΠ°Π³ΠΈΠ²Π°Ρ ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ β ΠΏΠΎ ΡΡΡΠ΅ΠΊΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΠΎ git restore --staged <file> Π² Git 2.23+.
ΠΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅ Π½Π΅ΡΠ΄Π°ΡΠ½ΠΎΠ³ΠΎ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ»ΠΈΡΠ½ΠΈΡ. git reset --hard ORIG_HEAD Π²ΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅, ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π²ΡΠ΅Π΅ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΏΠ΅ΡΠ΅Π΄ ΡΠ»ΠΈΡΠ½ΠΈΠ΅ΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Git Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ HEAD Π΄ΠΎ ΡΠ»ΠΈΡΠ½ΠΈΡ Π² ORIG_HEAD.
ΠΡΠΈΡΠΈΡΠ΅ΡΠΊΠ°Ρ Π»ΠΎΠ²ΡΡΠΊΠ°: ΠΎΡΠΏΡΠ°Π²ΠΊΠ° ΠΏΠΎΡΠ»Π΅ ΡΠ±ΡΠΎΡΠ°
ΠΡΠ»ΠΈ Π²Ρ ΡΠ±ΡΠΎΡΠΈΠ»ΠΈ Π²Π΅ΡΠΊΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΆΠ΅ Π±ΡΠ»Π° ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½Π° Π½Π° ΡΠ΄Π°Π»ΡΠ½Π½ΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ, Π° Π·Π°ΡΠ΅ΠΌ Π²ΡΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΎΡΠΏΡΠ°Π²ΠΊΡ, Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΡΠ°ΡΡΠ½ΠΈΠΊΠ°, ΡΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½Π°Ρ Π²Π΅ΡΠΊΠ° ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅Ρ ΡΡΠΎΡ ΡΠ΄Π°Π»ΡΠ½Π½ΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ, Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΡ
ΠΎΠ΄ΡΡΠ°ΡΡΡ ΠΈΡΡΠΎΡΠΈΡ. ΠΡΠΎ ΠΎΠ΄Π½Π° ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ½Π½ΡΡ
ΠΏΡΠΈΡΠΈΠ½ ΠΏΠΎΡΠ΅ΡΠΈ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ² Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡΡ
ΡΡΠ΅Π΄Π°Ρ
. ΠΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΠΉΡΠ΅ git reset Ρ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ git push --force Π² ΠΎΠ±ΡΠ΅ΠΉ Π²Π΅ΡΠΊΠ΅ Π±Π΅Π· ΡΠ²Π½ΠΎΠΉ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΈΠΈ Ρ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ.
# Dangerous on shared branches β use only on private/local branches
git reset --hard HEAD~2
git push --force origin feature/my-branchgit checkout: Π½Π°Π²ΠΈΠ³Π°ΡΠΈΡ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΈΡΡΠΎΡΠΈΠΈ
git checkout β ΠΌΠ½ΠΎΠ³ΠΎΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°Π΅Ρ ΡΠ°Π±ΠΎΡΠ΅Π΅ Π΄Π΅ΡΠ΅Π²ΠΎ Π΄Π»Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ Π²Π΅ΡΠΊΠ΅, ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΌΡ ΠΊΠΎΠΌΠΌΠΈΡΡ ΠΈΠ»ΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌΡ ΡΠ°ΠΉΠ»Ρ. ΠΠ½Π° Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ ΠΈΡΡΠΎΡΠΈΡ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ². Π Git 2.23 ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΠΈΡ
Π²Π΅ΡΡΠΈΡΡ
Π΅Ρ ΡΡΠ½ΠΊΡΠΈΠΈ Π±ΡΠ»ΠΈ ΡΠ°Π·Π΄Π΅Π»Π΅Π½Ρ Π½Π° git switch (Π΄Π»Ρ Π²Π΅ΡΠΎΠΊ) ΠΈ git restore (Π΄Π»Ρ ΡΠ°ΠΉΠ»ΠΎΠ²), ΠΎΠ΄Π½Π°ΠΊΠΎ git checkout ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½Π° ΠΈ Π΄ΠΎΠΌΠΈΠ½ΠΈΡΡΠ΅Ρ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π½ΡΡ
ΡΡΠ΅Π΄Π°Ρ
.
Π‘ΠΏΡΠ°Π²ΠΎΡΠ½ΠΈΠΊ ΠΏΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΡ
git checkout <branch_name> # Switch to an existing branch
git checkout -b <new_branch> # Create and switch to a new branch
git checkout <commit_hash> # Enter detached HEAD state at a specific commit
git checkout -- <file_name> # Discard working directory changes to a file
git checkout <commit_hash> -- <file> # Restore a single file from a specific commitΠ‘ΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΎΡΡΠΎΠ΅Π΄ΠΈΠ½ΡΠ½Π½ΠΎΠ³ΠΎ HEAD: ΡΡΠΎ ΡΡΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ
ΠΠΎΠ³Π΄Π° Π²Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΠ΅ git checkout <commit_hash>, Git ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅Ρ HEAD ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΎΠ½ ΡΠΊΠ°Π·ΡΠ²Π°Π» Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠΎΠΌΠΌΠΈΡΠ°, Π° Π½Π΅ Π½Π° ΡΡΡΠ»ΠΊΡ Π²Π΅ΡΠΊΠΈ. ΠΡΠΎ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ΠΌ ΠΎΡΡΠΎΠ΅Π΄ΠΈΠ½ΡΠ½Π½ΠΎΠ³ΠΎ HEAD. ΠΡΠ±ΡΠ΅ ΠΊΠΎΠΌΠΌΠΈΡΡ, ΡΠ΄Π΅Π»Π°Π½Π½ΡΠ΅ Π² ΡΡΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ, Π½Π΅Π΄ΠΎΡΡΠΈΠΆΠΈΠΌΡ Π½ΠΈ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Π²Π΅ΡΠΊΠΈ β ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡΡΡΡ ΠΎΡΠΈΡΠΎΡΠ΅Π²ΡΠΈΠΌΠΈ ΠΈ Π² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΠΈΡΠΎΠ³Π΅ Π±ΡΠ΄ΡΡ ΡΠ΄Π°Π»Π΅Π½Ρ ΡΠ±ΠΎΡΡΠΈΠΊΠΎΠΌ ΠΌΡΡΠΎΡΠ° Git, Π΅ΡΠ»ΠΈ Π²Ρ Π½Π΅ ΡΠΎΠ·Π΄Π°Π΄ΠΈΡΠ΅ Π²Π΅ΡΠΊΡ Π΄Π»Ρ ΠΈΡ
ΡΠΎΡ
ΡΠ°Π½Π΅Π½ΠΈΡ.
git checkout 4f7a2c1 # HEAD now points directly to commit 4f7a2c1
git checkout -b hotfix/patch # Rescue those commits by creating a branchΠ Π°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ½Π½ΡΠΉ ΡΠ΅Π°Π»ΡΠ½ΡΠΉ ΡΡΠ΅Π½Π°ΡΠΈΠΉ: ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π½Π° ΡΡΠ°ΡΡΠΉ ΠΊΠΎΠΌΠΌΠΈΡ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ΅Π³ΡΠ΅ΡΡΠΈΠΈ, ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ Π²Π½ΠΎΡΠΈΡ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅, Π΄Π΅Π»Π°Π΅Ρ ΠΊΠΎΠΌΠΌΠΈΡ, Π° Π·Π°ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π½Π° main β ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠ΅ΡΡΡ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡΠ»ΠΎ ΠΏΡΠΈΠ²ΡΠ·Π°Π½ΠΎ ΠΊ Π²Π΅ΡΠΊΠ΅.
ΠΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΈΠ· ΠΈΡΡΠΎΡΠΈΠΈ
ΠΠ΄Π½Π° ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ
ΡΠΎΡΠΌ git checkout β ΡΠ΅Π»Π΅Π²ΠΎΠ΅ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π°:
git checkout HEAD~3 -- src/config/database.phpΠΡΠΎ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ database.php Π² ΡΠΎΠΌ Π²ΠΈΠ΄Π΅, Π² ΠΊΠ°ΠΊΠΎΠΌ ΠΎΠ½ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π» ΡΡΠΈ ΠΊΠΎΠΌΠΌΠΈΡΠ° Π½Π°Π·Π°Π΄, Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π² Π²Π°Ρ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΈ ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³, Π½Π΅ Π·Π°ΡΡΠ°Π³ΠΈΠ²Π°Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΉ ΡΠ°ΠΉΠ» ΠΈ Π½Π΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Ρ HEAD. ΠΡΠΎ Ρ
ΠΈΡΡΡΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π²Π΅ΡΠΊΠΈ.
git revert: Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½Π°Ρ ΠΎΡΠΌΠ΅Π½Π° Π΄Π»Ρ ΠΎΠ±ΡΠ΅ΠΉ ΠΈΡΡΠΎΡΠΈΠΈ
git revert ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΠΊΠΎΠΌΠΌΠΈΡ, ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΠΈΠΉ ΠΎΠ±ΡΠ°ΡΠ½ΡΡ ΡΠ°Π·Π½ΠΈΡΡ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡΠ°. ΠΡΡ
ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠΈΡ ΠΎΡΡΠ°ΡΡΡΡ Π² ΠΈΡΡΠΎΡΠΈΠΈ Π½Π΅ΡΡΠΎΠ½ΡΡΡΠΌ. ΠΡΠΎ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΉ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ ΠΎΡΠΌΠ΅Π½Ρ Π΄Π»Ρ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΆΠ΅ Π±ΡΠ»ΠΈ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½Ρ Π² ΠΎΠ±ΡΡΡ ΡΠ΄Π°Π»ΡΠ½Π½ΡΡ Π²Π΅ΡΠΊΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ Π½Π΅ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΠΈΡΡΠΎΡΠΈΡ β Π° ΡΠ°ΡΡΠΈΡΡΠ΅Ρ Π΅Ρ.
Π‘ΠΏΡΠ°Π²ΠΎΡΠ½ΠΈΠΊ ΠΏΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΡ
git revert HEAD # Revert the most recent commit
git revert <commit_hash> # Revert a specific commit by hash
git revert HEAD~3..HEAD # Revert a range of commits (creates multiple revert commits)
git revert -n <commit_hash> # Stage the revert without committing (--no-commit)Π€Π»Π°Π³ βno-commit: ΠΏΠ°ΠΊΠ΅ΡΠ½Π°Ρ ΠΎΡΠΌΠ΅Π½Π°
ΠΡΠΈ ΠΎΡΠΌΠ΅Π½Π΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ² ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡΠ° ΠΎΡΠΌΠ΅Π½Ρ Π½Π° ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΡΠΎΡΠΈΡΡ ΠΆΡΡΠ½Π°Π». Π€Π»Π°Π³ -n (ΠΈΠ»ΠΈ --no-commit) ΠΏΠΎΠ΄Π³ΠΎΡΠ°Π²Π»ΠΈΠ²Π°Π΅Ρ Π²ΡΠ΅ ΠΎΡΠΌΠ΅Π½Ρ Π±Π΅Π· ΠΊΠΎΠΌΠΌΠΈΡΠ°, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΡΡ ΠΈΡ
Π² ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠΌΠΌΠΈΡ ΠΎΡΠΌΠ΅Π½Ρ:
git revert -n HEAD~4..HEAD
git commit -m "Revert: roll back broken authentication refactor"ΠΡΠΌΠ΅Π½Π° ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ² ΡΠ»ΠΈΡΠ½ΠΈΡ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΎΡΠΎΠ±ΠΎΠΉ ΠΎΡΡΠΎΡΠΎΠΆΠ½ΠΎΡΡΠΈ
ΠΡΠΌΠ΅Π½Π° ΠΊΠΎΠΌΠΌΠΈΡΠ° ΡΠ»ΠΈΡΠ½ΠΈΡ ΡΡΠ΅Π±ΡΠ΅Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ»Π°Π³Π° -m, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Git Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π·Π½Π°ΡΡ, ΠΊΠ°ΠΊΡΡ ΡΡΠΎΡΠΎΠ½Ρ ΡΠ»ΠΈΡΠ½ΠΈΡ ΡΡΠΈΡΠ°ΡΡ Β«ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΉΒ» ΠΈΡΡΠΎΡΠΈΠ΅ΠΉ:
git revert -m 1 <merge_commit_hash>ΠΠ΄Π΅ΡΡ -m 1 ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ (ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π²Π΅ΡΠΊΡ, Π² ΠΊΠΎΡΠΎΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ»ΠΎΡΡ ΡΠ»ΠΈΡΠ½ΠΈΠ΅) Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ Π»ΠΈΠ½ΠΈΠΈ. ΠΡΠΎΠΏΡΡΠΊ ΡΡΠΎΠ³ΠΎ ΡΠ»Π°Π³Π° Π΄Π»Ρ ΠΊΠΎΠΌΠΌΠΈΡΠ° ΡΠ»ΠΈΡΠ½ΠΈΡ ΠΏΡΠΈΠ²Π΅Π΄ΡΡ ΠΊ ΠΎΡΠΈΠ±ΠΊΠ΅ Git. ΠΡΠΎ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ½Π½ΠΎΠ΅ ΠΏΡΠ΅ΠΏΡΡΡΡΠ²ΠΈΠ΅ ΠΏΡΠΈ ΠΎΡΠΌΠ΅Π½Π΅ Π½Π΅ΡΠ΄Π°ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡΠ° ΡΠ»ΠΈΡΠ½ΠΈΡ ΡΠ΅Π»ΠΈΠ·Π° Π² CI/CD-ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ°Ρ
.
Π‘ΡΠ°Π²Π½Π΅Π½ΠΈΠ΅: Reset vs. Checkout vs. Revert
| ΠΡΠΈΡΠ΅ΡΠΈΠΉ | `git reset` | `git checkout` | `git revert` |
|---|---|---|---|
| ΠΠ·ΠΌΠ΅Π½ΡΠ΅Ρ ΠΈΡΡΠΎΡΠΈΡ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ² | ΠΠ° | ΠΠ΅Ρ | ΠΠ΅Ρ (Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΠΊ Π½Π΅ΠΉ) |
| ΠΠ»ΠΈΡΠ΅Ρ Π½Π° ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ | Π‘ --hard ΠΈΠ»ΠΈ --mixed | ΠΠ° | ΠΠ° (ΡΠ΅ΡΠ΅Π· Π½ΠΎΠ²ΡΠΉ ΠΊΠΎΠΌΠΌΠΈΡ) |
| ΠΠ»ΠΈΡΠ΅Ρ Π½Π° ΠΎΠ±Π»Π°ΡΡΡ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠΈ (ΠΈΠ½Π΄Π΅ΠΊΡ) | ΠΠ° (ΠΊΡΠΎΠΌΠ΅ --soft) | Π’ΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΡΠΌΠ΅ Ρ ΡΠ°ΠΉΠ»ΠΎΠΌ | ΠΠ΅Ρ |
| ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ΅Π½ Π΄Π»Ρ ΠΎΠ±ΡΠΈΡ /ΡΠ΄Π°Π»ΡΠ½Π½ΡΡ Π²Π΅ΡΠΎΠΊ | ΠΠ΅Ρ | ΠΠ° (ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠ΅Π½ΠΈΠ΅) | ΠΠ° |
| Π‘ΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΠΊΠΎΠΌΠΌΠΈΡ | ΠΠ΅Ρ | ΠΠ΅Ρ | ΠΠ° |
| ΠΠ±ΡΠ°ΡΠΈΠΌ | Π§Π°ΡΡΠΈΡΠ½ΠΎ (ΡΠ΅ΡΠ΅Π· ORIG_HEAD) | ΠΠ° | ΠΠ° |
| ΠΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΠΊΠΎΠΌΠΌΠΈΡΡ ΡΠ»ΠΈΡΠ½ΠΈΡ | ΠΠ΅Ρ | ΠΠ° (Π½Π°Π²ΠΈΠ³Π°ΡΠΈΡ) | ΠΠ° (Ρ -m) |
| Π‘ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ Π² Git 2.23+ | Π’ΠΎΡ ΠΆΠ΅ | git switch / git restore | Π’ΠΎΡ ΠΆΠ΅ |
ΠΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΆΠ΄ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ: ΠΌΠ°ΡΡΠΈΡΠ° ΡΠ΅ΡΠ΅Π½ΠΈΠΉ
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ git reset ΠΊΠΎΠ³Π΄Π°:
- ΠΡ ΡΠ°Π±ΠΎΡΠ°Π΅ΡΠ΅ Π² Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ, Π½Π΅ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½Π½ΠΎΠΉ Π²Π΅ΡΠΊΠ΅ ΠΈ Ρ ΠΎΡΠΈΡΠ΅ ΠΎΡΠΈΡΡΠΈΡΡ, ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΡΡ ΠΈΠ»ΠΈ ΠΎΡΠ±ΡΠΎΡΠΈΡΡ ΠΊΠΎΠΌΠΌΠΈΡΡ.
- ΠΠ°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΎΡΠΌΠ΅Π½ΠΈΡΡ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΏΠ΅ΡΠ΅Π΄ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠΌ.
- ΠΡ Ρ ΠΎΡΠΈΡΠ΅ ΠΎΡΠΌΠ΅Π½ΠΈΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠ»ΠΈΡΠ½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½Π΅ Π±ΡΠ»ΠΎ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ΠΎ.
- ΠΡ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π² ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΉ Π²Π΅ΡΠΊΠ΅ ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°ΡΡ Π΅Ρ ΠΈΡΡΠΎΡΠΈΡ ΠΏΠ΅ΡΠ΅Π΄ ΠΎΡΠΊΡΡΡΠΈΠ΅ΠΌ pull request.
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ git checkout ΠΊΠΎΠ³Π΄Π°:
- ΠΠ°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ Π²Π΅ΡΠΊΠ°ΠΌΠΈ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Π°ΠΊΡΠΈΠ²Π½ΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ.
- ΠΡ Ρ ΠΎΡΠΈΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ ΠΈΡΡΠΎΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡΠ°, Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡ.
- ΠΠ°ΠΌ Π½ΡΠΆΠ½ΠΎ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠ°ΠΉΠ» Π΄ΠΎ Π΅Π³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡΠ°.
- ΠΡ ΡΠΎΠ·Π΄Π°ΡΡΠ΅ Π½ΠΎΠ²ΡΡ Π²Π΅ΡΠΊΡ ΠΈΠ· ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠΉ ΡΠΎΡΠΊΠΈ Π² ΠΈΡΡΠΎΡΠΈΠΈ.
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ git revert ΠΊΠΎΠ³Π΄Π°:
- ΠΠΎΠΌΠΌΠΈΡ ΡΠΆΠ΅ Π±ΡΠ» ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½ Π² ΡΠ΄Π°Π»ΡΠ½Π½ΡΡ ΠΈΠ»ΠΈ ΠΎΠ±ΡΡΡ Π²Π΅ΡΠΊΡ.
- ΠΡ ΡΠ°Π±ΠΎΡΠ°Π΅ΡΠ΅ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΠΈ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΡΡ, ΠΏΠΎΠ΄Π΄Π°ΡΡΡΡΡΡ Π°ΡΠ΄ΠΈΡΡ ΠΈΡΡΠΎΡΠΈΡ.
- ΠΠ°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΎΡΠΌΠ΅Π½ΠΈΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΠΊΠΎΠΌΠΌΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΠΌΡΠΌ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ (Π½Π΅Π»ΠΈΠ½Π΅ΠΉΠ½Π°Ρ ΠΎΡΠΌΠ΅Π½Π°).
- ΠΠ°Ρ ΠΏΡΠΎΠ΅ΠΊΡ ΡΡΠ΅Π±ΡΠ΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ Π½ΠΎΡΠΌΠ°ΡΠΈΠ²Π½ΡΠΌ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡΠΌ ΠΈΠ»ΠΈ ΠΆΡΡΠ½Π°Π»ΠΎΠ² Π°ΡΠ΄ΠΈΡΠ°, Π³Π΄Π΅ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΈΡΡΠΎΡΠΈΠΈ Π·Π°ΠΏΡΠ΅ΡΠ΅Π½ΠΎ.
Π Π°ΡΡΠΈΡΠ΅Π½Π½ΡΠΉ ΡΡΠ΅Π½Π°ΡΠΈΠΉ: Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅ git reset βhard
ΠΡΠ»ΠΈ Π²Ρ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ git reset --hard ΠΈ ΠΏΠΎΡΠ΅ΡΡΠ»ΠΈ ΠΊΠΎΠΌΠΌΠΈΡΡ, ΠΎΠ½ΠΈ Π½Π΅ ΠΈΡΡΠ΅Π·Π»ΠΈ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ. Reflog Git Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΠΊΠ°ΠΆΠ΄ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ, Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΡΠΊΠ°Π·ΡΠ²Π°Π» HEAD, Π΄Π°ΠΆΠ΅ ΠΏΠΎΡΠ»Π΅ ΠΆΡΡΡΠΊΠΎΠ³ΠΎ ΡΠ±ΡΠΎΡΠ°:
git reflog
# Output example:
# a1b2c3d HEAD@{0}: reset: moving to HEAD~3
# 7e8f9a0 HEAD@{1}: commit: Add payment gateway integration
# ...
git reset --hard HEAD@{1} # Restore to the commit before the accidental resetΠΠ°ΠΏΠΈΡΠΈ reflog ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈΡΡΠ΅ΠΊΠ°ΡΡ ΡΠ΅ΡΠ΅Π· 90 Π΄Π½Π΅ΠΉ (gc.reflogExpire), ΠΏΠΎΡΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠΊΠ½ΠΎ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π½Π΅ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎ. ΠΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π½ΠΎΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ΅ ΠΈΠ»ΠΈ Π² ΡΡΠ΅Π΄Π΅ VPS Π₯ΠΎΡΡΠΈΠ½Π³Π°, Π³Π΄Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΡΠ½Π½ΡΠΉ Git-ΡΠ΅ΡΠ²ΠΈΡ, ΡΠ°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ Gitea ΠΈΠ»ΠΈ GitLab, Π²Π°ΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ .git Π²ΠΊΠ»ΡΡΡΠ½ Π² ΡΠ΅Π³ΡΠ»ΡΡΠ½ΡΠ΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΡΠ΅Π·Π΅ΡΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΈΠ·-Π·Π° ΡΡΠΎΠ³ΠΎ ΡΡΠΎΠΊΠ° Π΄Π΅ΠΉΡΡΠ²ΠΈΡ.
Π Π°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Π²Π°ΡΠ΅ΠΉ Git-ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ
ΠΠ°ΠΏΡΡΠΊ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΡΠ½Π½ΠΎΠ³ΠΎ Git-ΡΠ΅ΡΠ²Π΅ΡΠ° β Π±ΡΠ΄Ρ ΡΠΎ GitLab CE, Gitea ΠΈΠ»ΠΈ Gogs β ΡΡΠ΅Π±ΡΠ΅Ρ Π½Π°Π΄ΡΠΆΠ½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π° Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° ΠΈ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π±Π΅Π·ΠΎΡΠΊΠ°Π·Π½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ. ΠΠ΄ΠΈΠ½ ΠΏΠΎΠ²ΡΠ΅ΠΆΠ΄ΡΠ½Π½ΡΠΉ ΡΠ°ΠΉΠ» ΠΏΠ°ΠΊΠ΅ΡΠ° ΠΈΠ»ΠΈ ΠΏΡΠ΅ΡΠ²Π°Π½Π½Π°Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΠ° Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠΈΠΊΠ»Π° git gc ΠΌΠΎΠ³ΡΡ Π½Π°ΡΡΡΠΈΡΡ ΡΠ΅Π»ΠΎΡΡΠ½ΠΎΡΡΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ. ΠΠ»Ρ ΠΊΠΎΠΌΠ°Π½Π΄, ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΡ
Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡΠΌΠΈ, ΠΡΠ΄Π΅Π»Π΅Π½Π½ΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ΅ΡΡΡΡΡ, ΠΏΠΎΠ»Π½ΡΠΉ root-Π΄ΠΎΡΡΡΠΏ Π΄Π»Ρ ΡΠΎΠ½ΠΊΠΎΠΉ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² core.packedGitWindowSize ΠΈ pack.threads Git, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΎΠΏΡΡΠΊΠ½ΡΡ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ NVMe, Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΡ Π΄Π»Ρ Π±ΠΎΠ»ΡΡΠΈΡ
ΠΌΠΎΠ½ΠΎΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠ΅Π².
ΠΠ»Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈΠ»ΠΈ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡΠ°Π»ΡΠ½ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ², ΠΊΠΎΡΠΎΡΡΠΌ Π½ΡΠΆΠ½Π° ΡΠΈΡΡΠ°Ρ ΡΡΠ΅Π΄Π° Linux Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° Git-Ρ ΡΠΊΠΎΠ², CI-ΡΠΊΡΠΈΠΏΡΠΎΠ² ΠΈ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠΎΠ² ΡΠ°Π·Π²ΡΡΡΡΠ²Π°Π½ΠΈΡ, VPS Ρ cPanel ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΡ ΠΏΠ°Π½Π΅Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π½Π°ΡΡΠ΄Ρ Ρ ΠΏΠΎΠ»Π½ΡΠΌ SSH-Π΄ΠΎΡΡΡΠΏΠΎΠΌ β ΡΡΡΡΠ°Π½ΡΡ Π½Π°ΠΊΠ»Π°Π΄Π½ΡΠ΅ ΡΠ°ΡΡ ΠΎΠ΄Ρ Π½Π° ΡΡΡΠ½ΠΎΠ΅ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΏΡΠΈ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠΈ Π³ΠΈΠ±ΠΊΠΎΡΡΠΈ Π΄Π»Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΡ Git-Ρ ΡΠΊΠΎΠ² ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π΄ΠΎΡΡΡΠΏΠΎΠΌ.
ΠΡΠ»ΠΈ Π²Π°Ρ ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ°Π·Π²ΡΡΡΡΠ²Π°Π½ΠΈΡ, Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌΡΠ΅ git push, Π·Π°ΡΠΈΡΠ° Π²Π°ΡΠ΅Π³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ° Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ SSL-ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠΉ β ΠΊΠ°ΠΊ Π΄Π»Ρ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ»Π΅Π·Π½ΡΡ
Π½Π°Π³ΡΡΠ·ΠΎΠΊ Π²Π΅Π±Ρ
ΡΠΊΠΎΠ², ΡΠ°ΠΊ ΠΈ Π΄Π»Ρ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΡΠ΄Π°Π»ΡΠ½Π½ΡΡ
Git-ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠ΅Π² Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ HTTPS Π±Π΅Π· ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΎΠ².
ΠΠ»ΡΡΠ΅Π²ΡΠ΅ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π²ΡΠ²ΠΎΠ΄Ρ
git reset --hardβ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½Π°Ρ ΠΈΠ· ΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ Π±Π΅Π·Π²ΠΎΠ·Π²ΡΠ°ΡΠ½ΠΎΠΉ, Π½Π΅Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΠΌΠΎΠΉ ΠΏΠΎΡΠ΅ΡΠ΅ Π΄Π°Π½Π½ΡΡ , Π΅ΡΠ»ΠΈ ΡΡΠΎΠΊ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ reflog ΠΈΡΡΡΠΊ.git revertβ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°, ΠΊΠΎΡΠΎΡΡΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΡΠ»Π΅git pushΠ±Π΅Π· Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ.- Π‘ΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΎΡΡΠΎΠ΅Π΄ΠΈΠ½ΡΠ½Π½ΠΎΠ³ΠΎ
HEADΠΎΡgit checkout <hash>Π½Π΅ ΡΠ΄Π°Π»ΡΠ΅Ρ ΠΊΠΎΠΌΠΌΠΈΡΡ β Π½ΠΎ Π»ΡΠ±ΡΠ΅ Π½ΠΎΠ²ΡΠ΅ ΠΊΠΎΠΌΠΌΠΈΡΡ, ΡΠ΄Π΅Π»Π°Π½Π½ΡΠ΅ Π² ΡΡΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ, Π±ΡΠ΄ΡΡ ΠΎΡΠΈΡΠΎΡΠ΅Π²ΡΠΈΠΌΠΈ, Π΅ΡΠ»ΠΈ Π²Ρ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅git checkout -b <new_branch>. - Π€Π»Π°Π³
-nΠ΄Π»Ρgit revertΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈ Π²Π°ΠΆΠ΅Π½ Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠ°Π½ΠΈΡ ΡΠΈΡΡΠΎΠ³ΠΎ ΠΆΡΡΠ½Π°Π»Π° ΠΏΡΠΈ ΠΎΡΠΊΠ°ΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ² ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ. - Git 2.23+ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅Ρ
git checkoutΠ½Π°git switchΠΈgit restoreΠ΄Π»Ρ ΡΡΠ½ΠΎΡΡΠΈ β ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π΄Π΅Π»Π°Π΅Ρ ΠΎΠ±Π΅ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ ΡΡΠ°Π·Ρ ΠΈΠ½ΡΡΠΈΡΠΈΠ²Π½ΠΎ ΠΏΠΎΠ½ΡΡΠ½ΡΠΌΠΈ. - ΠΡΠ΅Π³Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΡΠΉΡΠ΅ ΡΠ΅ΠΊΡΡΡΡ Π²Π΅ΡΠΊΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ
git statusΠΈgit log --oneline -5ΠΏΠ΅ΡΠ΅Π΄ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Π»ΡΠ±ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΎΡΠΌΠ΅Π½Ρ. - Π ΠΎΠ±ΡΠ΅ΠΉ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠΉΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° Π·Π°ΡΠΈΡΡ Π²Π΅ΡΠΎΠΊ (GitHub, GitLab, Gitea β Π²ΡΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΡΠΎ) Π΄Π»Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ
git push --forceΠ² Π²Π΅ΡΠΊΠ°ΡmainΠΈreleaseΠ½Π° ΡΡΠΎΠ²Π½Π΅ ΡΠ΅ΡΠ²Π΅ΡΠ°.
Π§Π°ΡΡΠΎ Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ
Π ΡΡΠΌ ΡΠ°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ git reset --soft ΠΈ git reset --mixed?
ΠΠ±Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°ΡΡ HEAD Π½Π° ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠΈΡ, Π½ΠΎ --soft ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π²Π°ΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π½ΡΠΌΠΈ Π² ΠΈΠ½Π΄Π΅ΠΊΡΠ΅, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ --mixed (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ) ΡΠ°ΠΊΠΆΠ΅ ΠΎΡΠΈΡΠ°Π΅Ρ ΠΈΠ½Π΄Π΅ΠΊΡ, ΠΎΡΡΠ°Π²Π»ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠ°Π±ΠΎΡΠ΅ΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅. ΠΠΈ ΠΎΠ΄Π½Π° ΠΈΠ· Π½ΠΈΡ
Π½Π΅ Π·Π°ΡΡΠ°Π³ΠΈΠ²Π°Π΅Ρ ΡΠ°ΠΉΠ»Ρ Π½Π° Π΄ΠΈΡΠΊΠ΅.
ΠΠΎΠΆΠ½ΠΎ Π»ΠΈ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΊΠΎΠΌΠΌΠΈΡΡ ΠΏΠΎΡΠ»Π΅ git reset --hard?
ΠΠ°, Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ
ΠΎΠΊΠ½Π° ΠΈΡΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΊΠ° Π΄Π΅ΠΉΡΡΠ²ΠΈΡ reflog (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ 90 Π΄Π½Π΅ΠΉ). ΠΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ git reflog Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° Ρ
ΡΡΠ° ΠΊΠΎΠΌΠΌΠΈΡΠ° ΠΏΠΎΡΠ΅ΡΡΠ½Π½ΠΎΠ³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ, Π·Π°ΡΠ΅ΠΌ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ git reset --hard <hash> ΠΈΠ»ΠΈ git checkout -b recovery <hash> Π΄Π»Ρ Π΅Π³ΠΎ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ.
ΠΠΎΡΠ΅ΠΌΡ git revert Π΄Π»Ρ ΠΊΠΎΠΌΠΌΠΈΡΠ° ΡΠ»ΠΈΡΠ½ΠΈΡ ΡΡΠ΅Π±ΡΠ΅Ρ ΡΠ»Π°Π³Π° -m?
ΠΠΎΠΌΠΌΠΈΡ ΡΠ»ΠΈΡΠ½ΠΈΡ ΠΈΠΌΠ΅Π΅Ρ Π΄Π²ΡΡ
ΡΠΎΠ΄ΠΈΡΠ΅Π»Π΅ΠΉ. Git Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΡΡΡ ΡΠ°Π·Π½ΠΈΡΡ ΠΈΠ½Π²Π΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ, Π±Π΅Π· ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ Π»ΠΈΠ½ΠΈΠΈ Ρ Π²Π°ΡΠ΅ΠΉ ΡΡΠΎΡΠΎΠ½Ρ. -m 1 ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Git ΡΡΠΈΡΠ°ΡΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ Π²Π΅ΡΠΊΠΎΠΉ, ΠΎΡΠΌΠ΅Π½ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ, Π²Π½Π΅ΡΡΠ½Π½ΡΠ΅ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ½Π½ΠΎΠΉ Π²Π΅ΡΠΊΠΎΠΉ.
Π―Π²Π»ΡΠ΅ΡΡΡ Π»ΠΈ git checkout -- <file> ΡΠ΅ΠΌ ΠΆΠ΅, ΡΡΠΎ ΠΈ git restore <file>?
Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ Π΄Π° β ΠΎΠ±Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΎΡΠ±ΡΠ°ΡΡΠ²Π°ΡΡ Π½Π΅ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π½ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΠ΅Π³ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° Π΄Π»Ρ ΡΠ°ΠΉΠ»Π°, Π²ΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Ρ Π΅Π³ΠΎ ΠΈΠ· ΠΈΠ½Π΄Π΅ΠΊΡΠ°. git restore Π±ΡΠ»Π° Π²Π²Π΅Π΄Π΅Π½Π° Π² Git 2.23 ΠΊΠ°ΠΊ ΠΌΠ΅Π½Π΅Π΅ Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½Π°Ρ Π·Π°ΠΌΠ΅Π½Π°, Π½ΠΎ git checkout -- <file> Π΄Π°ΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π²ΠΎ Π²ΡΠ΅Ρ
Π²Π΅ΡΡΠΈΡΡ
Git.
ΠΠΎΠ³Π΄Π° ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅Π»ΡΠ·Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ git reset Π² Π²Π΅ΡΠΊΠ΅?
ΠΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ git reset (ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Ρ --hard ΠΈΠ»ΠΈ --mixed) Π² Π»ΡΠ±ΠΎΠΉ Π²Π΅ΡΠΊΠ΅, ΠΊΠΎΡΠΎΡΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΠΆΠ΅ ΠΊΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°Π»ΠΈ ΠΈΠ»ΠΈ ΠΈΠ· ΠΊΠΎΡΠΎΡΠΎΠΉ Π²ΡΠΏΠΎΠ»Π½ΡΠ»ΠΈ pull. ΠΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΡΠ°ΡΡ
ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΈΡ
Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΈΡΡΠΎΡΠΈΠΈ Ρ ΡΠ΄Π°Π»ΡΠ½Π½ΠΎΠΉ, ΡΡΠ΅Π±ΡΡ ΠΎΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΡΠ°ΡΡΠ½ΠΈΠΊΠ° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ±ΡΠΎΡΠ° ΠΈΠ»ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ β ΠΈ ΡΠΈΡΠΊΡΠ΅Ρ ΠΌΠΎΠ»ΡΠ° ΠΎΡΠ±ΡΠΎΡΠΈΡΡ ΠΊΠΎΠΌΠΌΠΈΡΡ, ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠ΅ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° ΠΈΡ
ΠΌΠ°ΡΠΈΠ½Π°Ρ
.
Π½Π° Π²ΡΠ΅Ρ
Ρ
ΠΎΡΡΠΈΠ½Π³ΠΎΠ²ΡΡ
ΡΡΠ»ΡΠ³Π°Ρ