Git Rebase
עודכן לאחרונה
git rebase מעביר את הקומיטים של הענף שלכם כך שירוצו מחדש מעל ענף אחר, ויוצר היסטוריה ישרה וליניארית במקום קומיט מיזוג. rebase אינטראקטיבי (-i) הולך רחוק יותר ומאפשר לאחד, לסדר מחדש, לערוך או להשמיט קומיטים. מכיוון ש-rebase משכתב קומיטים, עשו אותו רק לעבודה שעוד לא שיתפתם.
נסו את הפקודות האלה בעורך הטרמינל אונליין: shell אמיתי בדפדפן, בלי להתקין כלום.
תחביר
| פקודה | מה היא עושה |
|---|---|
git rebase main | הרצה מחדש של הקומיטים שלכם מעל main |
git rebase -i HEAD~3 | עריכה אינטראקטיבית של 3 הקומיטים האחרונים |
git rebase --onto main old new | העברת טווח קומיטים אל main |
git rebase --continue | המשך אחרי פתרון קונפליקטים |
git rebase --abort | ביטול ה-rebase ושחזור הענף |
git pull --rebase | pull עם rebase במקום מיזוג |
מילות מפתח ב-rebase אינטראקטיבי
בעורך ש--i פותח, שנו את pick לאחת מאלה.
| מילת מפתח | מה היא עושה |
|---|---|
pick | השארת הקומיט |
reword | השארת הקומיט ועריכת ההודעה שלו |
squash | איחוד לקומיט הקודם ושילוב ההודעות |
fixup | איחוד לקומיט הקודם וזריקת ההודעה הזו |
drop | הסרת הקומיט לגמרי |
שאלות נפוצות על git rebase
מה git rebase עושה?
הוא לוקח את הקומיטים בענף הנוכחי ומריץ אותם מחדש, אחד אחד, מעל ענף אחר, כאילו התחלתם את העבודה מהקומיט האחרון של אותו ענף. התוצאה היא היסטוריה ליניארית בלי קומיט מיזוג. בתהליך הקומיטים נכתבים מחדש (ומקבלים hash חדש).
מה זה rebase אינטראקטיבי?
git rebase -i <base> פותח עורך עם רשימת הקומיטים מאז <base>, ושם אפשר לסדר אותם מחדש, לאחד כמה לאחד עם squash, לנסח הודעות מחדש עם reword, לערוך קומיט עם edit או להשמיט אותו עם drop. זה הכלי העיקרי לסידור סדרת קומיטים מבולגנת לפני שמשתפים אותה.מהו כלל הזהב של rebase?
איך מתקנים או מבטלים rebase עם קונפליקטים?
כש-rebase נעצר על קונפליקט, פתרו את הקבצים, הריצו עליהם
git add, ואז git rebase --continue. השתמשו ב-git rebase --skip כדי להשמיט את הקומיט הנוכחי, או ב-git rebase --abort כדי לבטל לגמרי ולהחזיר את הענף למצב שלפני תחילת ה-rebase.אפשר לתרגל את זה אונליין?
כן. פתחו את עורך הטרמינל אונליין כדי להריץ
git rebase ב-shell אמיתי בדפדפן, בלי להתקין כלום. גם קורס ה-Git האינטראקטיבי והחינמי של Coddy מלמד rebase צעד אחר צעד.