שם ה-branch חייב לתאר את מטרתו. my-branch, test123, nissan-2 — פסולים הם. הכותב שם שאינו מובן לזר — כאילו כתב בלשון סתרים.
הנוסח הכשר: feature/user-auth, fix/login-crash, chore/update-deps. שכן ביום שתחפש בהיסטוריה — השם הוא כל מה שיש לך.
מסכת גיט
5 הלכות
שם ה-branch חייב לתאר את מטרתו. my-branch, test123, nissan-2 — פסולים הם. הכותב שם שאינו מובן לזר — כאילו כתב בלשון סתרים.
הנוסח הכשר: feature/user-auth, fix/login-crash, chore/update-deps. שכן ביום שתחפש בהיסטוריה — השם הוא כל מה שיש לך.
ה-branch חייב לחיות זמן קצר. branch שאינו ממוזג תוך ימים ספורים — בחזקת בעיה הוא, וחובה לשאול מדוע.
branch ארוך צובר קונפליקטים כדרך שמים צוברים עננים. וכשם שעננים רבים מביאים סערה — כך branch ארוך מביא merge מייסר ולילה ארוך.
לפני כל merge חובה לעדכן את ה-branch מ-main. הממזג ללא עדכון — מסתכן בקונפליקטים שיכול היה למנוע.
אמרו חכמים: git rebase main או git merge main — שניהם כשרים, ובלבד שייעשו. ומחלוקת rebase ו-merge — לא נכריע כאן, אך לעשות אחד מהם — חובה גמורה.
Rebase הוא העיקר. הוא שומר על היסטוריה נקייה ולינארית, וכל commit מובן לבדו. git log קריא הוא מתנה לדורות.
Merge הוא העיקר. הוא שומר על אמת ההיסטוריה. Rebase משנה SHA ומשכתב עבר — ובכך שקר בפיו. ההיסטוריה צריכה להיות אמיתית, לא ערוכה.
ומה תועיל היסטוריה אמיתית שאי אפשר לקרוא?
ומה תועיל היסטוריה נקייה שמסתירה מה שבאמת קרה?
squash + rebase — נקי ואמיתי.
squash מוחק עבודה. אני מסרב.
תֵּיקוּ
branch שמוזג — חובה למחקו. branch מת שנשאר אחרי merge מטמא את ה-repo ומבלבל את הבאים אחריך.
ויפתח המפתח את רשימת ה-branches ויראה ארבעים ושלושה branches — ורובם מוזגים זה מכבר. ויאמר: מה זה? ומי עשה זאת? ולא ידע איש.
אסור לעבוד ישירות על branch משותף כגון develop או staging. כל עבודה — ב-branch פרטי, וממנו ל-PR.
שכן branch משותף הוא רכוש הציבור, ומי שדוחף אליו ישירות — פוגע בכולם. ומעשה היה ושניים עבדו על אותו branch — ויהי הקונפליקט, ויהיו הקללות, ותקלקל הידידות.