Skip to content

Git Cherry-pick ​

🧠 Π‘ΡƒΡ‚ΡŒ ​

ΠŸΠ΅Ρ€Π΅Π½Π΅ΡΡ‚ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ β€” Π±Π΅Π· ΠΌΠ΅Ρ€ΠΆΠ° всСго ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ.

Когда Π½ΡƒΠΆΠ΅Π½:

  • Π₯отфикс ΠΈΠ· feature Π½ΡƒΠΆΠ΅Π½ Π² master прямо сСйчас, Π½Π΅ доТидаясь PR
  • ΠšΠΎΠΌΠΌΠΈΡ‚ случайно ΠΏΠΎΠΏΠ°Π» Π½Π΅ Π² Ρ‚Ρƒ Π²Π΅Ρ‚ΠΊΡƒ
  • НуТно ΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ фикс ΠΈΠ· preprod ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² master

πŸ’» Π‘Π°Π·ΠΎΠ²ΠΎΠ΅ использованиС ​

bash
# Найти hash Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°
git log --oneline feature/some-branch

# ΠŸΠ΅Ρ€Π΅Π½Π΅ΡΡ‚ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠΌΠΌΠΈΡ‚ Π² Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ
git cherry-pick a1b2c3

πŸ’» НСсколько ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² ​

bash
# Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² (a1b2c3 Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ, f4e5d6 Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ)
git cherry-pick a1b2c3..f4e5d6

# Вразброс
git cherry-pick a1b2c3 d4e5f6 g7h8i9

πŸ’» ΠŸΠ΅Ρ€Π΅Π½ΠΎΡ Π±Π΅Π· Π°Π²Ρ‚ΠΎΠΊΠΎΠΌΠΌΠΈΡ‚Π° ​

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ измСнСния ΠΏΠ΅Ρ€Π΅Π΄ фиксациСй:

bash
git cherry-pick a1b2c3 --no-commit
git status       # ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΏΠ°Π»ΠΎ Π² индСкс
git diff --staged
git commit

πŸ’» ΠšΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ ΠΏΡ€ΠΈ cherry-pick ​

bash
# Π Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π² Ρ„Π°ΠΉΠ»Π°Ρ…, Π·Π°Ρ‚Π΅ΠΌ:
git add .
git cherry-pick --continue

# ΠžΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ β€” Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ Π΄ΠΎ cherry-pick:
git cherry-pick --abort

⚠️ ΠŸΠΎΠ΄Π²ΠΎΠ΄Π½Ρ‹Π΅ ΠΊΠ°ΠΌΠ½ΠΈ ​

  • Cherry-pick создаёт Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ с Ρ‚Π΅ΠΌ ΠΆΠ΅ содСрТимым, Π½ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠΌ hash β€” ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π» Π² исходной Π²Π΅Ρ‚ΠΊΠ΅ остаётся
  • Если Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΊΠΎΠΌΠΌΠΈΡ‚ ΠΏΠΎΠ·ΠΆΠ΅ ΠΏΠΎΠΏΠ°Π΄Ρ‘Ρ‚ Ρ‡Π΅Ρ€Π΅Π· merge β€” Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ Π΄ΡƒΠ±Π»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹
  • НС злоупотрСбляй: Ссли Π½ΡƒΠΆΠ½ΠΎ пСрСнСсти ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² β€” Π»ΡƒΡ‡ΡˆΠ΅ merge ΠΈΠ»ΠΈ rebase

Built with VitePress and ❀️