Menu
Coddy logo textTech

Git Cherry-pick

עודכן לאחרונה

git cherry-pick מעתיק את השינויים מקומיט אחד או יותר ומחיל אותם על הענף הנוכחי כקומיטים חדשים. כך לוקחים תיקון בודד מענף אחר בלי למזג את כל הענף: שימושי להעברת hotfix לגרסה קודמת (backport) או לשליפת קומיט אחד מענף פיצ'ר.

נסו את הפקודות האלה בעורך הטרמינל אונליין: shell אמיתי בדפדפן, בלי להתקין כלום.

git cherry-pick מעתיק קומיט נבחר אחד מענף אחר ומחיל אותו על הענף הנוכחי שלכם.

תחביר

פקודהמה היא עושה
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דילוג על הקומיט הנוכחי

דוגמה מלאה

שלבפקודהתוצאה
1git log --oneline hotfixמציאת ה-hash של התיקון, למשל a1b2c3d
2git switch mainמעבר לענף שצריך לקבל את התיקון
3git 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 מלמד העברת קומיטים בין ענפים צעד אחר צעד.
איור של שפות התכנות ב-Coddy

ללמוד Git עם Coddy

להתחיל