ענפים (Branches)
מהו branch?
Branch הוא מצביע ל-commit מסוים. כשמוסיפים commit חדש - ה-branch מתקדם איתו אוטומטית. branches הם הלב של git: הם מאפשרים לכם לעבוד על מספר פיצ'רים במקביל בלי שאחד יפריע לשני.
ה-branch הראשי
כשיוצרים מאגר חדש, נוצר אוטומטית branch ראשי. בעבר נקרא master, היום נקרא main. זהו ה-branch שמייצג את הקוד היציב.
git config --global init.defaultBranch main
פקודות בסיסיות
צפייה ב-branches
git branch # רשימת branches מקומיים
git branch -a # כל ה-branches כולל remote
git branch -r # רק remote branches
git branch -v # עם ה-commit האחרון של כל branch
ה-branch הנוכחי מסומן בכוכבית *.
יצירת branch
git branch feature/login # יצירה בלי מעבר
git branch feature/login HEAD~3 # יצירה מ-commit ספציפי
מעבר ל-branch
git checkout feature/login # תחביר ישן
git switch feature/login # תחביר חדש (מומלץ)
יצירה + מעבר בו-זמנית
git checkout -b feature/login # תחביר ישן
git switch -c feature/login # תחביר חדש
מחיקה
git branch -d feature/login # מחיקה בטוחה (רק אם הקוד מוזג)
git branch -D feature/login # מחיקה כפויה
שינוי שם
git branch -m old-name new-name # branch אחר
git branch -m new-name # ה-branch הנוכחי
checkout מול switch
git switch נוסף ב-Git 2.23 (2019) כדי להפריד בין שני שימושים שונים של checkout:
| פקודה | תפקיד |
|---|---|
git switch |
מעבר בין branches |
git restore |
שחזור קבצים |
git checkout |
עושה את שניהם (תחביר ישן, עדיין נתמך) |
דוגמת זרימה - פיצ'ר חדש
# 1. עוברים ל-main ומסנכרנים
git switch main
git pull
# 2. יוצרים branch חדש לפיצ'ר
git switch -c feature/user-profile
# 3. עובדים ועושים commits
# ...עריכות...
git add .
git commit -m "Add user profile component"
# ...עוד עריכות...
git add .
git commit -m "Add avatar upload to user profile"
# 4. דוחפים לשרת
git push -u origin feature/user-profile
# 5. אחרי שה-PR התקבל ומוזג, מנקים
git switch main
git pull
git branch -d feature/user-profile
מודל מנטלי
חשבו על branches ככבישים מקבילים. ה-main הוא הכביש הראשי. כשמתחילים לעבוד על פיצ'ר חדש, יוצרים יציאה הצידה - branch חדש - שמתחיל מאותה נקודה. עובדים עליו, מוסיפים commits, ובסוף "חוזרים" ל-main דרך merge.
main: A───B───C─────────────M
\ /
feature: D───E───F
ב-A, B, C ו-M ה-main התקדם. ה-feature התחיל מ-C (יציאה), הוסיף D, E ו-F, ובסוף התמזג ב-M.
מינוח קונבנציונלי
feature/login- פיצ'ר חדשbugfix/header-alignment- תיקון באגhotfix/critical-security-issue- תיקון דחוף ב-productionrelease/v2.0- הכנה לשחרור גרסהexperiment/new-architecture- ניסוי
סיכום
- branches זולים ב-git - אל תהססו ליצור אותם
- branch אחד = פיצ'ר אחד = PR אחד
- מוחקים branches שהושלמו - השאירו את הרשימה נקייה
בדקו את עצמכם
נסו לענות לבד לפני שאתם פותחים את התשובה.
-
איך יוצרים ענף חדש ועוברים אליו?
הצגת התשובה
תשובה א. switch -c יוצר ועובר בפקודה אחת.
-
למה לעבוד בענפים?
הצגת התשובה
תשובה ב. כשהפיצ'ר מוכן ממזגים אותו.