מהן טעויות ה- Git הנפוצות וכיצד לתקן אותן?



בטל את השגיאות הנפוצות ביותר בעת גרסת הקוד שלך בכלי מערכת הגירסאות git והגן על שלמות הנתונים שלך.

עם בום של טכנולוגיה, זה הופך להיות בלתי נמנע מכל איש IT לעבוד על מספר נתונים בו זמנית והנתונים שלך מתפתחים כל הזמן עם הזמן. כמו כן, חשוב לעקוב אחר כל שינוי בנתונים ולהיות מוכנים לבטל או לבטל כל שינוי לא רצוי בעת הצורך.

אני חייב להתוודות, גרסאות הנתונים שלי ב- Git מאפשרות לי להיות יותר ניסיוני בפיתוח הפרויקט שלי. אם אני מתבלבל, אני יודע שלגיט תמיד יש דרך לבטל ו / או להחזיר את הגרסה הזו של הפרויקט שלי כפי שהיה לפני שהתברגתי. כל אחד שכבה נועדה לאפשר את סקירת השינויים בנתונים ו / או תיקונם לפני העברת הנתונים בשלב הבא. להלן הטעויות שמסוקרות בבלוג זה:





בטל קבצים / ספריות מבמה מאינדקס

בעת הוספה ו / או שינוי קבצים לעיתים קרובות אתה נוטה להשתמש בהתנהגות ברירת המחדל של הפקודה 'git add', כלומר להוסיף את כל הקבצים והספריות לאינדקס.פעמים רבות אתה מרגיש צורך לבטל קבצים מסוימים או לשנות אותם בפעם האחרונה לפני שאתה מבצע אותם.



תחביר: איפוס git


להסיר קבצים מהאינדקס - נפוצות טעויות git -Edureka

ביטול הצבת קבצים מאזור האינדקס נותן לך הזדמנות נוספת לעבוד מחדש על הנתונים שלך לפני שתתחייב לרפו מקומי.



ערוך את ההודעה המחויבת האחרונה

פקודה: git commit - לשנות
באפשרותך לערוך את הודעת ההתחייבות האחרונה מבלי ליצור הודעה חדשה. כדי לרשום את יומני ההתחייבות, הגדרתי כינוי 'היסט':
פקודה: git config - alias alhist.hist 'log --pretty = פורמט: '% C (צהוב)% h% Creset% ad | % C (ירוק)% s% Creset% C (אדום)% d% Creset% C (כחול) [% an] '- גרף - דקורציה - תאריך = קצר' x


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

שכחתי כמה שינויים בהתחייבות האחרונה

נניח ששכחת לבצע כמה שינויים וכבר ביצעת את תמונת המצב שלך, וגם אתה לא רוצה לבצע התחייבות נוספת כדי להדגיש את הטעות שלך.
פקודה: git commit - לשנות


הדגשתי כיצד שוחזר ושונה מזהה ה- sha-1 של אובייקט ההתחייבות האחרון. התיימרתי לעשות התחייבות אחת ושילבתי את שני השינויים לאחד.

מחק שינויים מקומיים

אז הנה מקרה בו שיניתי את הקובץ 'README' והעליתי אותו. לאחר מכן, שיניתי את אותו הקובץ בפעם השנייה אבל הבנתי שאני לא רוצה את השינוי השני.

עכשיו, אל תבטל את כל השינוי באופן ידני, אני יכול פשוט למשוך את הגירסה המבוימת של הקובץ.
תחביר:
קופת git -–שינויים מקומיים בקובץ
קופת git -–שינויים מקומיים בכל הקבצים בספריה & ביישנים וביישנים

פקודה: קופת git - README

לכן, מחקתי את השינויים האחרונים שלי בקובץ וקיבלתי את הגרסה המבוימת של הקובץ. בהתחייבות הבאה, רק הגירסה המבוימת של הקובץ נכנסת למאגר המקומי.

נתונים אישיים הועברו למאגר המקומי

אני רוצה להסיר נתונים מסוימים מהמאגר המקומי אך לשמור את הקבצים בספריית העבודה.
תחביר:
איפוס git - מעורב HEAD ~
איפוס git - מעורב

פקודה: איפוס git - מעורב HEAD ~ 1
HEAD ~ 1 מציין התחייבות רגע לפני ההתחייבות האחרונה שהסניף הנוכחי HEAD הצביע עליה.

קבצים בתמונת המצב הנוכחית הוסרו הן מהמאגר המקומי והן מאזור הבימוי. הוסף את הדפוסים הבאים בקובץ .gitignore העולמי כדי לא לכלול אותם במעקב באמצעות git.
vim ~ / .gitignore_global
# קבצי סיסמה #
*.לַעֲבוֹר
*.מַפְתֵחַ
* .passwd

עם זאת, ההתחייבות שהייתה לה תמונת המצב של קבצי הסיסמה מוסרת, ותקבל אזור בימוי נקי. הקבצים שלי עדיין נמצאים בספריית העבודה שלי אך אינם נמצאים עוד במאגר המקומי, וגם לא יידחקו במאגר מרוחק.

זְהִירוּת: אם אתה מאבד אותם git לא יכול לשחזר אותם עבורך מכיוון שהוא לא יודע על זה.

החלף את ההתחייבות האחרונה בהתחייבות חדשה

תחביר: איפוס git --soft [/ HEAD ~ n>]

האפשרות '–סופט' פשוט תסיר את הקבצים המחויבים מהמאגר המקומי בזמן שהם עדיין מבוימים באינדקס ותוכל להתחייב עליהם מחדש לאחר סקירה. הוא ה- sha-1 של תמונת המצב שברצונך להסיר מה- repo המקומי. כאשר n הוא מספר המחויבויות לפני התחייבות HEAD

פקודה :reset git - soft HEAD ~ 1


שנה קבצים ושלב אותם שוב

פקודה: git commit -m 'הוספת index.html ו- style.css'
היסטוריית ההתחייבות שלך מתבררת כעת:

ביצע את הנתונים הלא נכונים

תחביר:
איפוס git - קשה HEAD ~ n–אפס את הפרויקט ל- 'n' מתחייב לפני תמונת המצב המחויבת האחרונה
איפוס git - קשה–אפס את הפרויקט לתמונת הזיהוי המוגדרת

פקודה: איפוס git - קשה HEAD ~ 1


ההתחייבות האחרונה והקבצים המושחתים מוסרים מהמאגר המקומי, מאזור הבימוי וכן מספריית העבודה.

זְהִירוּת: זו פקודה מסוכנת כאשר בסופו של דבר אתה מאבד קבצים בספריית העבודה. לא מומלץ במאגר משותף מרחוק.

חזור למצב הפרויקט הישן שלי

אתה יכול לעבור למצב ישן יותר של הפרויקט שלך בהיסטוריה של הזמן. אם אתה מפשל בגירסה האחרונה או זקוק לשיפורים בקוד ישן יותר, ייתכן שתרצה ליצור סניף נוסף מאותו תמונת מצב של הפרויקט הישן כדי לא להפריע לעבודה הנוכחית שלך. בואו נראה איך:
א. ציין את היסטוריית הפרויקט והחליט על מזהה ההתחייבות הישן יותר, הפקודה:עבור היסט
ב. צור סניף נוסף מתוך מזהה ההתחייבות:git checkout - b-state e7aa9a5
ג. המשך לעבוד על הקוד ובהמשך מיזוג / ריבייס עם סניף 'מאסטר'.

שחזר סניף מקומי שנמחק

אפשר לחדש את העבודה האבודה בענף עזר. תגיד, מחקתי את הענף 'old_code' בלי להתמזג עם הסניף הראשי ואיבדתי את העבודה. ולא, גם לא דחפתי את הסניף למאגר מרוחק, מה אז? ובכן git מסלולים ושמור רשומה ביומן של כל השינויים שנעשו בכל הפניה, בוא נראה את שלי:לך רפלוג

אז, HEAD @ {2} הוא המצביע כשעברתי לענף 'old_code', בואו נתאושש ככה:

תחביר:git checkout -b
פקודה:git check -b old_code HEAD @ {2}

אתה חייב להיות עכשיו בסניף 'old_code' עם העבודה האחרונה שלך בעת היווצרותה. בנוסף, מצביע ה'רפלוג 'ב- HEAD @ {1} היה ההתחייבות האחרונה שעניינה' old_code '. כדי לשחזר ייחודי זה התחל פשוט הפעל את הפקודה כ:איפוס git - קשה HEAD @ {1}.זה משחזר גם את הקבצים שהשתנו בספריית העבודה.

אם תרצה לדעת בפירוט כיצד פקודה זו עובדת וכיצד תוכל לנהל את ערכי 'רפלוג', תוכל לקרוא את ההודעה הקודמת שלי עלשחזור הענף שנמחק מ- glog reflog.

בטל שינויים שבוצעו בהתחייבות

ללכתלַחֲזוֹרמשמש להקלטת כמה התחייבויות חדשות כדי להפוך את ההשפעה של כמה התחייבויות קודמות.
תחביר: git revert
מיומני ההתחייבות שלי, ברצוני להפוך את השינוי שנעשה במזהה ההתחייבות המודגש:

פקודה: git לחזור 827bc0d

עדיף שלא תאפס את '–הקשה' את המשותף, אלא 'תקף' אותם כדי לשמור על ההיסטוריה כך שיהיה קל יותר לכולם לאתר את יומני ההיסטוריה כדי לגלות מה הוחזר, על ידי מי ולמה?

מהו ויזואליזציה של נתונים בתמונה

אתה יכול להשתמש באותה ההיגיון של הפניית ההתחייבויות הנוגעות למצביע HEAD במקום לתת את מזהה ה- commit, כמו ב- HEAD ~ 3 או HEAD ~ 4 וכן הלאה.

נתן שם שגוי לסניף שלי

אתה יכול לשנות שם של סניף מקומי. כל כך קורה פעמים רבות שתרצה לשנות את שם הסניף שלך על סמך הנושא שאתה עובד עליו בלי לעבור את הכאב של העברת כל העבודה שלך ממיקום אחד למשנהו. לדוגמה, אתה יכול להיות באותו ענף או בענף אחר ועדיין להיות מסוגל לשנות את שם הענף הרצוי כמוצג להלן:
תחביר: ענף git -m
פקודה: סניף git -m old_code old_ # 4920

כפי שאתה יכול לתהות האם git שומר על מעקב אחר שם זה? כן, זה אכן מתייחס לערכי ה'רפלוג 'שלך, הנה שלי:

שינוי שם של סניף לא ישפיע על ענף המעקב מרחוק שלו. נראה בסעיף המרוחק כיצד להחליף ענף במאגר המרוחק

סדר מחדש את יומני ההיסטוריה לפני שתלחץ לשלט רחוק

כמה הלוואי שהייתי עושה התחייבויות מסוימות מוקדם יותר מאחרים ולא הייתי מתחייב בכלל. ארגן מחדש וערוך באופן אינטראקטיבי את ההתחייבויות הישנות בכדי לתקן או לשפר את הקוד ביעילות
תחביר: git rebase -i
פקודה: git rebase -i fb0a90e- התחל לאתחל את ההתחייבויות שבוצעו לאחר ה- id-fb0a90e

בקר מחדש ב git rebase תיעוד כדי להבין במה שונה ריבייס '–אינטראקטיבי או - i' מבסיס מחדש רגיל.

ביצע שינויים שאינם קשורים להתחייבות אחת

במקרה זה, עליך לפצל התחייבות קבורה ישנה למספר התחייבויות לוגיות.
תחביר: git rebase -i
פקודה: git rebase -i fb0a90e
בעורך rebase, עליך לבחור e7aa9a5 id id ולשנות אותו ל'עריכה 'במקום' בחר '.

שינויים שאינם קשורים - טעויות git נפוצות - אודוריקה

כעת אתה תהיה בגרסת הפרויקט ל- commit id-e7aa9a5. ראשית, אפס את היסטוריית ההתחייבות ואת אזור ההיערכות לפיקוד הפיקוד הקודם:git reset HEAD ~ 1
שנית, ערוך + שלב + התחייב את הקבצים בנפרד
פקודות:
git add code && git commit -m 'הוספת קודים ראשוניים'
git הוסף קוד חדש && git commit -m 'הוספת קוד חדש'

שלישית, המשך בבסיס מחדש וסיום.

פקודה :git rebase - המשך
רביעית, צפו בהיסטוריה עם התחייבויות נוספות.

פקודה: עבור היסט

פיצול התחייב למספר באמצעות rebase - טעויות git נפוצות - Edureka

שנה דוא'ל של מחבר בכל התחייבות בכל הסניפים

אני כבר גרסתי והעברתי את קבצי הפרוייקט שלי ב- git כבר מזמן, אבל עד עכשיו מעולם לא הדהים אותי שמזהה הדוא'ל שלי נפגע ביומני ההיסטוריה שלי, שאף מתפרסמים במאגרים מרוחקים. ובכן, זה יכול לקרות לכל אחד כאשר אתה מגדיר בהתחלה את התצורות בקובץ '.gitconfig'. לגיט הקלה שלי יכול לִכתוֹב מִחָדָשׁ את משתני הסביבה שאנו מספקים בעת יצירת אובייקט התחייבות.

ראשית אני מקבל את הרשימה של מזהי דוא'ל להחליט את אלה שאני רוצה לשנות:
פקודה: יומן git - כל - pretty = פורמט: '% an% d'–זה מדפיס שם מחבר (שם / שם ענף)

שנית, אני רץ דרך כל התחייבות בכל ענף וכתוב מחדש את אובייקט ההתחייבות עם מזהה הדוא'ל החדש
פקודה:
git filter-branch - env-filter '
אם ['$ GIT_AUTHOR_NAME' = 'divya']
לאחר מכן
GIT_AUTHOR_EMAIL = 'divya@github.com'
לִהיוֹת
' -- --את כל

קבצים שאבדו ונמצאו

נניח שאיבדת קובץ מסוים ואינך זוכר את שמו, אך יכול לזכור מילים מסוימות בקובץ. במקרה זה, תוכלו לבצע את השלבים הבאים-
שלב 1: ציין את כל ההתחייבויות שהכילו אי פעם את תמונת המצב של הקובץ עם הדפוס שחיפש
פקודה :git rev-list - הכל | xargs git grep -i 'חותמת זמן'



שלב 2 : צור סניף חדש 'אבוד-נמצא' ממזהה ההתחייבות המודגש הזה
תחביר: קופת git -b אבוד נמצא d8c6a76a6dcb1fc6e8c3f6b097e1bd07e7cd328f

שכחתי איזה ענף מכיל את התחייבותי

לעיתים, לאחר שתזהה מזהה התחייבות באגי, כדאי לך להכיר את כל הענפים שעליהם התחייבות זו כדי שתוכל לתקן את כולם. בדיקת ההיסטוריה של כל סניף אינה מעשית במיוחד בפרויקט רב סניפי גדול.

התחייבות גרועה שבוצעה ביישום בניית הניווט שלי שברה פעם את הקוד, אז השתמשתי ב- פקודה 'git bisect' כדי לזהות את מזהה ההתחייבות שהיה רע ואחריופקודה:ענף git - מכיללרשום את הסניפים עם ההתחייבות הגרועה ההיא.

אז עכשיו אני מכיר את כל הענפים שעדיין מחויבים לרעה, יכולתי לבטל או לאפס את ערכת השינויים הזו.

מחק התחייבות מההיסטוריה

לפעמים אני מרגיש צורך פשוט למחוק התחייבות מההיסטוריה ולא להשאיר שום עקבות ממנה. לא הייתי ממליץ לך לנסות את הפעלול הזה בסניף משותף אלא רק בסניף המקומי שלך.
תחביר: git rebase -i
פקודה :git rebase -i 93859d8
בעורך rebase-> החלף את 'edit' ב- 'drop' עבור מזהה ההתחייבות המודגש: 69f4813

בחלק מהמקרים כתיבה מחודשת זו עלולה לגרום לעימותים. עליך לפתור סכסוכים ואז להמשיך הלאה.

אַזהָרָה : זוהי פקודה מסוכנת מכיוון שזו כותבת מחדש את ההיסטוריה ועלולה לאבד נתונים. ענף כזה שונה מעמיתו המרוחק ויהיה צורך לדחוף אותו עם--כּוֹחַאוֹ- כוח-עם-חכירהאוֹפְּצִיָה.

דחף ענף שגוי לשלט הרחוק

עכשיו, הנה מה שאני רוצה לעשות- אני רוצה למחוק a סניף מרוחק וגם להפסיק לעקוב אחרי זה מהסניף המקומי שלי. 'דחיפת גיט'פקודה כאשר משתמשים בה עם--לִמְחוֹקאפשרות מוחקת את הסניף המרוחק אז ככה אני מקבל את העותק המקומי של הפרויקט המשובט -

שיבוט git https://github.com/greets/myProj.git
cd myProj


פעם אחת, הענף המרוחק נמחק אחרים על ריפו המשותף חייבים לרענן ולעדכן את ההפניות המרוחקות שלהם עם ה---לִגזוֹםאפשרות למחוק את הפניות חסרות האובייקט:אחזור git - מקור גזום- v

בפוסט זה הזכרתי כמה מהטעויות או השינויים הנפוצים ש- git יכול לעזור לך לתקן. כל קוד הוא ייחודי ומפותח בדרכו, כך שישנן גם דרכים שונות לגשת ולתקן בעיה. תמיד תוכל להתייחס לפקיד תיעוד git כדי להבין כיצד פקודות git שונות שומרות על קוד המקור שלך וכיצד להשתמש בפקודות בצורה הטובה ביותר האפשרית.

עכשיו שהבנת את הטעויות הנפוצות של Git, בדוק זאת מאת אדוריקה, חברת למידה מקוונת מהימנה עם רשת של יותר מ -250,000 לומדים מרוצים הפזורים ברחבי העולם. קורס הדרכת ההסמכה של Edureka DevOps עוזר ללומדים להבין מה זה DevOps ולצבור מומחיות בתהליכים וכלים שונים של DevOps כגון Puppet, Jenkins, Nagios, Ansible, Chef, Saltstack ו- GIT לאוטומציה של שלבים מרובים ב- SDLC.

יש לך שאלה עבורנו? אנא הזכיר זאת בסעיף ההערות ב'טעויות Git נפוצות 'זה ונחזור אליך