Git Force Push
עודכן לאחרונה
git push רגיל נדחה כשהענף המקומי שלכם התפצל מהענף המרוחק: Git לא ידרוס קומיטים שאולי לא ראיתם. force push עוקף את הבדיקה הזו וגורם לענף המרוחק להיות זהה לענף המקומי. צריך אותו אחרי שכתוב היסטוריה (rebase או amend), אבל הוא עלול למחוק קומיטים של אחרים, ולכן עדיף להשתמש ב---force-with-lease הבטוח יותר.
נסו את הפקודות האלה בעורך הטרמינל אונליין: shell אמיתי בדפדפן, בלי להתקין כלום.
תחביר
| פקודה | מה היא עושה |
|---|---|
git push --force | דריסת הענף המרוחק, בלי בדיקת בטיחות |
git push -f | הצורה המקוצרת של --force |
git push --force-with-lease | דריסה רק אם אף אחד אחר לא דחף בינתיים |
git push --force-with-lease origin feature | force push בטוח יותר לענף מסוים |
--force מול --force-with-lease
| התנהגות | --force | --force-with-lease |
|---|---|---|
| דורס את הענף המרוחק | תמיד | רק אם לא השתנה מאז ה-fetch האחרון שלכם |
| יכול למחוק קומיטים של אחרים | כן | מסרב, אלא אם fetch רענן את ה-lease |
| מומלץ לצוותים | לא | כן |
שאלות נפוצות על git force push
מתי צריך לעשות force push?
כששכתבתם היסטוריה שכבר נמצאת במאגר המרוחק: אחרי
git rebase, אחרי git commit --amend או אחרי rebase אינטראקטיבי שאיחד קומיטים. הענף המקומי כבר לא תואם להיסטוריה של הענף המרוחק, ולכן push רגיל נדחה ורק force push יכול לעדכן אותו.מה ההבדל בין --force לבין --force-with-lease?
--force דורס את הענף המרוחק ללא תנאי, ועלול למחוק בשקט קומיטים שחבר צוות דחף אחרי ה-fetch האחרון שלכם. --force-with-lease דורס רק אם הענף המרוחק עדיין נמצא בקומיט שראיתם לאחרונה: אם מישהו אחר דחף בינתיים, הוא מסרב, וכך מגן על העבודה שלו. הסתייגות אחת: כל fetch (כולל fetch אוטומטי ברקע של סביבת פיתוח) מרענן את ה-lease, אז דחפו מיד אחרי שבדקתם את המאגר המרוחק. ועדיין, עדיף אותו על פני --force בכל ענף משותף.האם force push מסוכן?
הוא יכול להיות. בענף משותף,
--force פשוט עלול לדרוס קומיטים שאחרים דחפו, ולמעשה למחוק את העבודה שלהם מהמאגר המרוחק. בענף שרק אתם משתמשים בו זה בטוח. במקרה של ספק, השתמשו ב---force-with-lease, שנכשל בבטחה במקום לדרוס שינויים שלא ראיתם.איך מבטלים force push?
אם הקומיטים הישנים עדיין נמצאים אצלכם מקומית או ב-
git reflog, אפשר לאפס את הענף אליהם ולעשות force push שוב כדי לשחזר את המצב הקודם. זו עוד סיבה להשתמש ב---force-with-lease: הוא מלכתחילה מקטין מאוד את הסיכוי לדריסה בטעות.אפשר לתרגל את זה אונליין?
כן. פתחו את עורך הטרמינל אונליין כדי להריץ פקודות push של Git ב-shell אמיתי בדפדפן, בלי להתקין כלום. גם קורס ה-Git האינטראקטיבי והחינמי של Coddy מלמד עבודה עם מאגרים מרוחקים צעד אחר צעד.