Sobes.tech
Junior

cherry-pick чист?

sobes.tech AI

Ҷавоб аз AI

git cherry-pick барои интиқол додани як ё чанд комит аз як шоха ба шохаи дигар истифода мешавад.

Принсипи кор:

  1. Комит (ё комитҳо) муайяншударо дар шохаи манбаъ интихоб мекунад.
  2. Тағйирот дар ин комитҳоро ба шохаи фаъол ҳозира татбиқ мекунад.
  3. Комитҳои нав дар шохаи ҳозира бо ҳамон тағйирот ва паёмҳо, ки дар комитҳои аслӣ буданд, месозад.

Вақте ки истифода мешавад:

  • Тасҳеҳоти мушаххас аз як шоха (масалан, истеҳсолот) ба дигаре (масалан, рушд) интиқол додан, бе таъсир расондан ба дигар тағйирот.
  • Татбиқи тағйирот аз як шохаи хусусият ба дигар, бе пурра омезиш додани онҳо.
  • Бекор кардани merge-ҳои нодуруст бо нигоҳ доштани комитҳои алоҳида.

Фарқият бо merge ва rebase:

  • merge: Ҳаммезиши тамоми таърихи тағйирот аз як шоха ба дигар.
  • rebase: Навиштани таърихи комитҳо, гузоштани онҳо ба асоси нав.
  • cherry-pick: Танҳо комитҳои интихобшударо татбиқ мекунад, комитҳои нав месозад ва таърихи комитҳои аслӣ тағир намедиҳад.

Командаи асосӣ:

# Интиқоли як комит
git cherry-pick <commit-hash>

# Интиқоли чанд комит (дар тартиби нишон додашуда)
git cherry-pick <commit-hash-1> <commit-hash-2> ...

Масалан:

Гуфта мешавад, ки ду шоха ҳаст: main ва feature. Дар шохаи feature комит fix-typo анҷом дода шудааст. Ин комит бояд ба шохаи main интиқол дода шавад.

# Ба шохаи ҳадаф гузаред
git checkout main

# Бо истифода аз хеши комит аз шохаи `feature` cherry-pick кунед
git cherry-pick 7f3bca2 # Масалан хеш

Пас аз иҷрои команда, дар шохаи main комити нав бо ҳамон тағйиротҳо, ки дар fix-typo буданд, пайдо мешавад, аммо бо хеши дигар.