Git Cherry-pick
עודכן לאחרונה
git cherry-pick מעתיק את השינויים מקומיט אחד או יותר ומחיל אותם על הענף הנוכחי כקומיטים חדשים. כך לוקחים תיקון בודד מענף אחר בלי למזג את כל הענף: שימושי להעברת hotfix לגרסה קודמת (backport) או לשליפת קומיט אחד מענף פיצ'ר.
נסו את הפקודות האלה בעורך הטרמינל אונליין: shell אמיתי בדפדפן, בלי להתקין כלום.
תחביר
| פקודה | מה היא עושה |
|---|---|
git cherry-pick <hash> | החלת קומיט אחד על הענף הנוכחי |
git cherry-pick <a> <b> | החלת כמה קומיטים לפי הסדר |
git cherry-pick <a>..<b> | החלת טווח קומיטים (בלי a) |
git cherry-pick -n <hash> | החלת השינויים בלי ליצור קומיט עדיין |
git cherry-pick -x <hash> | ציון הקומיט המקורי בהודעה |
במהלך cherry-pick
אם cherry-pick נתקל בקונפליקט, פתרו אותו והמשיכו.
| פקודה | מה היא עושה |
|---|---|
git cherry-pick --continue | המשך אחרי פתרון הקונפליקטים |
git cherry-pick --abort | ביטול ושחזור הענף |
git cherry-pick --skip | דילוג על הקומיט הנוכחי |
דוגמה מלאה
| שלב | פקודה | תוצאה |
|---|---|---|
| 1 | git log --oneline hotfix | מציאת ה-hash של התיקון, למשל a1b2c3d |
| 2 | git switch main | מעבר לענף שצריך לקבל את התיקון |
| 3 | git cherry-pick a1b2c3d | מחיל את התיקון על main כקומיט חדש עם hash חדש |
שאלות נפוצות על git cherry-pick
מה git cherry-pick עושה?
הוא לוקח את השינויים שקומיט מסוים הכניס ומחיל אותם על הענף הנוכחי כקומיט חדש לגמרי (עם hash חדש). בניגוד ל-merge או ל-rebase, הוא לא מביא ענף שלם: רק את הקומיט או הקומיטים שציינתם.
מתי כדאי להשתמש ב-cherry-pick?
כשצריך קומיט מסוים במקום אחר: למשל, להעביר תיקון באג מ-
main לענף גרסה (backport), או לשלוף קומיט שימושי אחד מענף פיצ'ר בלי למזג את כל השאר. אם רוצים את הענף כולו, השתמשו ב-merge או ב-rebase במקום.איך עושים cherry-pick לכמה קומיטים?
פרטו אותם:
git cherry-pick <a> <b> <c> מחיל כל אחד לפי הסדר. לטווח רציף השתמשו ב-git cherry-pick <start>..<end>, שמחיל כל קומיט שאחרי start ועד end כולל. השתמשו ב-<start>^..<end> אם רוצים לכלול גם את start עצמו.מה קורה אם cherry-pick גורם לקונפליקט?
Git עוצר ומסמן את הקבצים שיש בהם קונפליקט. פתרו אותם, הריצו
git add על התוצאה ואז git cherry-pick --continue. כדי לסגת לגמרי, השתמשו ב-git cherry-pick --abort, שמחזיר את הענף למצב שלפני תחילת ה-cherry-pick.איך עושים cherry-pick לקומיט מענף אחר?
מצאו את ה-hash של הקומיט עם
git log --oneline <other-branch>, עברו לענף שצריך לקבל אותו והריצו git cherry-pick <hash>. אפשר גם להעביר שם של ענף, כמו ב-git cherry-pick feature, וכך נבחר הקומיט שבקצה הענף.מה ההבדל בין cherry-pick לבין merge?
git merge מביא כל קומיט בענף ומתעד את הנקודה שבה ההיסטוריות התאחדו. cherry-pick מעתיק רק את הקומיטים שציינתם, כקומיטים חדשים, בלי קשר למקוריים. מזגו את הענף כשרוצים את כולו; השתמשו ב-cherry-pick כשרוצים קומיט אחד או שניים.
אפשר לתרגל את זה אונליין?
כן. פתחו את עורך הטרמינל אונליין כדי להריץ
git cherry-pick ב-shell אמיתי בדפדפן, בלי להתקין כלום. גם קורס ה-Git האינטראקטיבי והחינמי של Coddy מלמד העברת קומיטים בין ענפים צעד אחר צעד.