Skip to content

DevOpscore

קהילת ה-DevOps של ישראל

Menu
  • עמוד הבית
  • קצת עליי
  • מבוא
  • העשרה
  • Virtualization
  • IT
  • Learn from incidents
  • DevOps tools
    • Docker
    • Git
    • Ansible
    • Vagrant
    • Kubernetes
    • OpenShift
Menu

Git advanced

Posted on ינואר 9, 2021מאי 8, 2021 by DevOpscore

אני כותב את המאמר הזה כהמשך למאמר הקודם שנמצא כאן. היום נצלול לעומקי 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:

אותה שורה נערכה בשני branchים שונים

סרטון על git rebase | merge

!Join us on telegram

כתיבת תגובה לבטל

האימייל לא יוצג באתר. שדות החובה מסומנים *

Comment moderation is enabled. Your comment may take some time to appear.

פוסטים אחרונים

  • Deploy static websites with GitLab Pages
  • The DevOps Role – Part 2
  • The DevOps Role – Part 1
  • How to run an application on Openshift
  • ?What is Agile

קטגוריות

  • DevOps tools
    • Ansible
    • Docker
    • git
    • Kubernetes
    • OpenShift
    • Vagrant
  • IT
  • Learn from incidents
  • Virtualization
  • העשרה
  • מבוא
English Hebrew
© 2025 DevOpscore | Powered by Minimalist Blog WordPress Theme