אני כותב את המאמר הזה כהמשך למאמר הקודם שנמצא כאן. היום נצלול לעומקי git ונבין את החוזקות שלו, קונספטים חדשים ופקודות git חדשות.
ראשית, חשוב לדעת שהפקודות שהצגתי במאמר הקודם והפקודות שאציג עכשיו, מאפשרות להוסיף flag-ים (סט אופציות נוסף) שיכול להתאים את השימוש שלהם למקרים שונים. נראה דוגמאות שימושיות של זה.
פקודות git חדשות
פקודה | הסבר |
git log | הפקודה מאפשרת לראות את ההיסטוריה של ה commit-ים ב-branch שממנו היא רצה. |
git merge | כך נוכל “להעביר” את כל השינויים מ-branch אחד ל-branch אחר. לעיתים יהיו קונפליקטים עם ה-branch שאליו עשינו merge. לדוגמא, כשכל אחד מה branch-ים מכיל שינויים אחרים באותם קבצים. |
git reset | כך נוכל “להחזיר לאחור” את הפרויקט שלנו. כזכור, כל commit הוא snapshot ובעזרת הפקודה נוכל לחזור ל-snapshot ישן יותר(גם אם אחריו נוספו עוד כמה). ב git יש מצביע ל-commit האחרון שנקרא HEAD. בעזרת הפקודה הזו, אנו מזיזים אותו אחורה וגורמים לזה שמה שבא אחריו – כבר לא קיים. ה-commit יימחק מהיסטוריית הפרויקט. |
git revert | הפקודה דומה לפקודה הקודמת. ההבדל העיקרי ביניהן הוא שהפקודה לא מוחקת את ה commit-ים עד ה-commit שאליו עשינו revert. היא יוצרת commit חדש שלא כולל שינויים מה-commit שעליו עשינו revert. זה שימושי יורת כשרוצים להשאיר את ה-commit “הגרוע” בהיסטוריה של הפרויקט. |
git rebase | בניגוד ל-merge, הפקודה rebase תעביר את כל ה commitים ל branch האחר כך שהם יופיעו אחרי ה commit-ים ב branch שאליו הם הועברו. גאם אם כרונולוגית, הם נכתבו לפני(הוא יוצר מחדש את ההיסטוריה של הפרויקט). זה שימושי כשנרצה לדאוג שההיסטוריה של הפרויקט נשארת נקייה וברורה. בגלל שהוא משנה את ההיסטוריה, יותר קשה לעשות לזה revert. בעזרת rebase – ניתן למחוק commit-ים מההיסטוריה. |
git stash | עוזר לנו לבצע snapshot של ה working directory כולל שינויים שלא עשינו להם commit(שהם רק tracked). ה-snapshot הזה נשמר בצד ונוכל לחזור אליו בעתיד. |
git tag | הפקודה מאפשרת לנו לשמור נקודות ציון משמעותיות בהיסטוריה של הפרויקט ולתייג אותן בצד. לדוגמא, ה-commit האחרון לפני שחרור גרסה. git יישמור לנו מצביע לנקודה הזאת בהיסטוריית הפרויקט. |
git clean | הפקודה תמחק את כל הדברים בפרויקט שלנו שהם untracked(בשלב ה working directory). שימושי כשבטעות הועתקו לפרויקט כל מיני דברים ונרצה למחוק את כולם בבת אחת. |
gitignore.
כאשר נרצה לגרום ל git לא להעלות ל remote repo קבצים ותיקיות מסוימות, נוכל להשתמש ביצירת קובץ בשם gitignore. הקובץ הזה יאפשר לנו להחליט איזה קבצים ותיקיות לא יעלו. לדוגמא, אם בתוך הקובץ נכתוב log.* , לא יועלו קבצים שמסתיימים בסיומת log. הם גם לא יהיו במעקב על ידי git.
יש ל-git תיעוד לכל פקודה כולל כל ה-flagים שלה, מומלץ להסתכל על זה באינטרנט. תחפשו את הפקודה ותראו את ההסבר שלה באתר הרשמי של git.
כדי לראות את השימושים של פקודות git שלמדנו מהמאמר הזה והמאמר הקודם, בצירוף עם flag-ים – אצרף עוד דוגמאות:
פקודה | הסבר |
git log –oneline –graph –decorate | יראה לנו את היסטוריית ה commitים בצורה אינטראקטיבית יותר כולל צבעים וגרף. |
<git reset –soft <commit hash | ישחזר לנו את המצב שהיה ב-commit הספציפי. במקום commit hash נכתוב את ה-hash של ה- commit שנרצה לחזור אליו. לכל commit יש hash משלו ואפשר לראות את זה כשרושמים git log. כל הקבצים שלא הוספו ל local repo עדיין יישארו, הם יעברו ל staging area. אם נכתוב –hard במקום –soft, הקבצים שלא הוספו ל local repo ייאבדו. |
<git rebase -i <commit hash | כשנעשה את זה, ייפתח לנו מסך בעורך טקסט שמתחיל עם “pick”. אם נרצה למחוק את ה commit הזה, נשנה את הטקסט ל drop ונשמור את הקובץ. |
<git add <file <git commit –amend <file | כך נוכל להוסיף קובץ/קבצים/תיקיות ל merge request שכבר פתחנו. |
“git commit –amend -m “message | כך נוכל לשנות את ההודעה של commit שכבר יצרנו(כשרושמים commit מומלץ לרשום עם -m כדי “להדביק” לו הודעה שמפרטת בשביל מה הוא נועד) |
אני ממליץ לכם לקרוא על עוד פקודות של git, לחזור על הפקודות הישנות וכמובן – לנסות בעצמכם.
אני ממליץ לכם לקרוא ולהתנסות עם הקישורים שצירפתי בתחתית העמוד במאמר הקודם.
לסיום, אצרף תמונה הומורוסטית וסרטון קצר ומלמד על git rebase/merge: