בסיס מחדש הוא תהליך ליישום מחדש של התחייבויות על גבי טיול בסיס אחר. הוא משמש להחלת רצף של התחייבויות מענפים נפרדים לתוך התחייבות סופית. זוהי אלטרנטיבה של פקודת git merge. זהו תהליך ליניארי של מיזוג.
ב-Git, המונח rebase מכונה תהליך של העברה או שילוב של רצף של commits ל-commit בסיס חדש. בסיס מחדש מועיל מאוד והוא דימיין את התהליך בסביבה של זרימת עבודה מסועפת של תכונה.
זה טוב לבסס מחדש את הענף שלך לפני מיזוגו.
באופן כללי, זוהי חלופה של פקודת git merge. מיזוג הוא תמיד שיא שמשתנה קדימה. באופן השוואתי, rebase הוא כלי משכנע לשכתוב היסטוריה ב-git. זה ממזג את ההתחייבויות השונות אחת אחת.
נניח שביצעת שלוש התחייבויות בענף המאסטר שלך ושלושה בענף השני שלך בשם מבחן. אם תמזג את זה, זה ימזג את כל ההתחייבויות בזמן. אבל אם תבסס אותו מחדש, הוא יתמזג בצורה ליניארית. שקול את התמונה הבאה:
התמונה שלמעלה מתארת כיצד rebase של git עובד. שלושת ה-commits של ענף המאסטר מתמזגים באופן ליניארי עם ה-commits של ענף הבדיקה.
מיזוג הוא הדרך הפשוטה ביותר לשילוב הענפים. הוא מבצע מיזוג תלת כיווני בין שתי התחייבויות הסניף האחרונות.
כיצד לבצע Rebase
כאשר ביצעת כמה התחייבויות על ענף תכונה (ענף מבחן) וחלק בענף המאסטר. אתה יכול לבסס מחדש כל אחד מהענפים האלה. השתמש בפקודה git log כדי לעקוב אחר השינויים (commit history). צ'ק-אאוט לסניף הרצוי שברצונך לבסס מחדש. כעת בצע את פקודת rebase באופן הבא:
תחביר:
$git rebase
אם יש התנגשויות מסוימות בענף, פתור אותן ובצע את הפקודות הבאות כדי להמשיך בשינויים:
$ git status
הוא משמש לבדיקת המצב,
$git rebase --continue
הפקודה לעיל משמשת להמשך השינויים שביצעת. אם ברצונך לדלג על השינוי, תוכל לדלג באופן הבא:
לספור sql מובחן
$ git rebase --skip
כאשר הבסיס מחדש הושלם. דחוף את המאגר למקור. שקול את הדוגמה למטה כדי להבין את פקודת git merge.
נניח שיש לך סניף נגיד מבחן 2 שעליו אתה עובד. אתה נמצא כעת בסניף test2 וביצעת כמה שינויים בקובץ הפרויקט newfile1.txt .
הוסף את הקובץ הזה למאגר:
$ git add newfile1.txt
עכשיו, בצע את השינויים. השתמש בפקודה הבאה:
$ git commit -m 'new commit for test2 branch.'
הפלט ייראה כך:
[test2 a835504] new commitfor test2 branch 1 file changed, 1 insertion(+)
החלף את הענף למאסטר:
$ git checkout master
תְפוּקָה:
Switched to branch 'master.' Your branch is up to date with 'origin/master.'
עכשיו אתה בסניף המאסטר. הוספתי את השינויים לקובץ שלי, אומר newfile.txt . הפקודה שלהלן משמשת להוספת הקובץ במאגר.
$ git add newfile.txt
כעת שלח את הקובץ לשינויים:
$ git commit -m ' new commit made on the master branch.'
תְפוּקָה:
[master 7fe5e7a] new commit made on master 1 file changed, 1 insertion(+) HiMaNshU@HiMaNshU-PC MINGW64 ~/Desktop/GitExample2 (master)
כדי לבדוק את היסטוריית היומן, בצע את הפקודה שלהלן.
$ git log --oneline
תְפוּקָה:
כפי שאנו יכולים לראות בהיסטוריית היומן, יש commit חדש בסניף המאסטר. אם אני רוצה לבסס מחדש את ענף test2 שלי, מה עלי לעשות? ראה את תרחיש ענף ה-rebase שלהלן:
Rebase Branch
אם יש לנו התחייבויות רבות מענפים שונים ורוצים למזג אותו באחד. כדי לעשות זאת, יש לנו שתי אפשרויות או שנוכל למזג אותו או לבסס אותו מחדש. זה טוב לבסס מחדש את הסניף שלך.
מהדוגמה לעיל, התחייבנו לענף המאסטר ורוצים לבסס אותו מחדש על ענף test2. בוא נראה את הפקודות שלהלן:
אגוז אדמה מול בוטנים
$ git checkout test2
פקודה זו תעביר אותך לסניף test2 מהמאסטר.
תְפוּקָה:
Switched to branch 'test2.'
עכשיו אתה בסניף test2. לפיכך, אתה יכול לבסס מחדש את הענף test2 עם הענף הראשי. ראה את הפקודה למטה:
$ git rebase master
פקודה זו תבסס מחדש את הענף test2 ותראה כ הגשת בקשה: התחייבות חדשה בסניף test2 . שקול את הפלט שלהלן:
תְפוּקָה:
Git Interactive Rebase
Git מאפשר עם Interactive Rebase; זהו כלי רב עוצמה המאפשר פעולות שונות כמו ערוך, שכתוב, סדר מחדש, ועוד על התחייבויות קיימות. ניתן להפעיל Rebase אינטראקטיבי רק בסניף שבו נשלחה כעת. לכן, הגדר את סניף ה-HEAD המקומי שלך בסרגל הצד.
ניתן להפעיל Git rebase אינטראקטיבי עם פקודת rebase, פשוט הקלד -אני יחד עם פקודת rebase. כאן ' אני ' מייצג אינטראקטיבי. תחביר של פקודה זו ניתן להלן:
תחביר:
$ git rebase -i
זה יפרט את כל האפשרויות האינטראקטיביות הזמינות.
תְפוּקָה:
לאחר הפלט הנתון, הוא יפתח עורך עם אפשרויות זמינות. שקול את הפלט שלהלן:
תְפוּקָה:
כאשר אנו מבצעים את הפקודה git interactive rebase, הוא יפתח את עורך הטקסט המוגדר כברירת מחדל עם הפלט שלמעלה.
האפשרויות שהוא מכיל מפורטות להלן:
- לִבחוֹר
- ניסוח מחדש
- לַעֲרוֹך
- קישוא
- לתקן
- Exec
- לשבור
- יְרִידָה
- תווית
- אִתחוּל
- לְמַזֵג
האפשרויות לעיל מבצעות את המשימות הספציפיות שלהן עם git-rebase. בואו נבין כל אחת מהאפשרויות הללו בקצרה.
בחר (-p):
בחירה עומדת כאן שההתחייבות כלולה. סדר ההתחייבויות תלוי בסדר פקודות הבחירה במהלך ה-rebase. אם אינך רוצה להוסיף commit, עליך למחוק את כל השורה.
ניסוח מחדש (-r):
וולברין נגד גירית
המילה המחודשת די דומה לפקודת pick. אפשרות הניסוח מחדש השהתה את תהליך ה-rebase ומספקת הזדמנות לשנות את הודעת ה-commit. זה לא משפיע על כל שינוי שנעשה על ידי המחויבות.
עריכה:
אפשרות העריכה מאפשרת לתקן את ההתחייבות. ניתן להוסיף או לשנות את אמצעי התיקון, ההתחייבויות. אנחנו יכולים גם לבצע התחייבויות נוספות לפני הפקודת המשך rebase. זה מאפשר לנו לפצל מחויבות גדולה למחוייבות קטנה יותר; יתרה מכך, אנו יכולים להסיר שינויים שגויים שנעשו בהתחייבות.
סקווש (-ים):
אופציית הסקווש מאפשרת לך לשלב שניים או יותר commits ל-commit אחד. זה גם מאפשר לנו לכתוב הודעת התחייבות חדשה לתיאור השינויים.
תיקון (-f):
זה די דומה לפקודת הסקווש. הוא השליך את המסר של ההתחייבות למיזוג. הודעת ה-commit הישנה יותר משמשת לתיאור שני השינויים.
Exec (-x):
אפשרות ה- exec מאפשרת לך להריץ פקודות מעטפת שרירותיות כנגד commit.
הפסקה (-b):
אפשרות ההפסקה עוצרת את ה-rebasing במיקום פשוט. זה ימשיך לשחזר מאוחר יותר עם ' git rebase --continue ' פקודה.
שחרר (-d):
אפשרות ההורדה משמשת להסרת ההתחייבות.
תווית (-l):
אפשרות התווית משמשת לסימון מיקום הראש הנוכחי בשם.
איפוס (-t):
אפשרות האיפוס משמשת לאיפוס ראש לתווית.
דוגמה למחרוזת משנה של java
GitMerge לעומת Rebase
השאלה התמוהה הנפוצה ביותר עבור משתמשי git היא מתי להשתמש בפקודה מיזוג ומתי להשתמש ב-rebase. שתי הפקודות דומות, ושתיהן משמשות למיזוג ההתחייבויות שבוצעו על ידי הענפים השונים של מאגר.
בסיס מחדש אינו מומלץ בסניף משותף מכיוון שתהליך הבסיס מחדש יצור מאגרים לא עקביים. עבור יחידים, בסיס מחדש יכול להיות שימושי יותר מאשר מיזוג. אם אתה רוצה לראות את ההיסטוריה המלאה, עליך להשתמש במיזוג. מיזוג עוקב אחר כל ההיסטוריה של התחייבויות, בעוד ש-rebase משכתב היסטוריה חדשה.
פקודות Git rebase אמרו כחלופה של git merge. עם זאת, יש להם כמה הבדלים מרכזיים:
Git Merge | Git Rebase |
---|---|
מיזוג יוצר מחויבות סופית במיזוג. | Git rebase לא יוצר שום commit בזמן rebasing. |
זה ממזג את כל ההתחייבויות כמחוייבות אחת. | זה יוצר מסלול ליניארי של התחייבויות. |
זה יוצר היסטוריה גרפית שאולי קצת מורכבת להבנה. | זה יוצר היסטוריה לינארית שניתן להבין בקלות. |
זה בטוח למזג שני סניפים. | Git 'rebase' עוסק בניתוח החמור. |
ניתן לבצע מיזוג בסניפים ציבוריים ופרטיים כאחד. | זו בחירה שגויה להשתמש ב-rebasing על סניפים ציבוריים. |
מיזוג משלב את התוכן של ענף הפיצ'רים עם ענף המאסטר. אז ענף המאסטר משתנה, והיסטוריית הסניפים של התכונות נשארת עקבית. | בסיס מחדש של ענף המאסטר עשוי להשפיע על ענף התכונות. |
מיזוג שומר על ההיסטוריה. | בסיס מחדש משכתב את ההיסטוריה. |
Git merge מציג את כל הקונפליקטים בבת אחת. | Git rebase מציג קונפליקטים אחד אחד. |