Menu
Coddy logo textTech

Git Force Push

עודכן לאחרונה

git push רגיל נדחה כשהענף המקומי שלכם התפצל מהענף המרוחק: Git לא ידרוס קומיטים שאולי לא ראיתם. force push עוקף את הבדיקה הזו וגורם לענף המרוחק להיות זהה לענף המקומי. צריך אותו אחרי שכתוב היסטוריה (rebase או amend), אבל הוא עלול למחוק קומיטים של אחרים, ולכן עדיף להשתמש ב---force-with-lease הבטוח יותר.

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

force push גורם לענף המרוחק להתאים להיסטוריה המקומית ששכתבתם; הקומיט שהתפצל במאגר המרוחק נמחק.

תחביר

פקודהמה היא עושה
git push --forceדריסת הענף המרוחק, בלי בדיקת בטיחות
git push -fהצורה המקוצרת של --force
git push --force-with-leaseדריסה רק אם אף אחד אחר לא דחף בינתיים
git push --force-with-lease origin featureforce 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 מלמד עבודה עם מאגרים מרוחקים צעד אחר צעד.
איור של שפות התכנות ב-Coddy

ללמוד Git עם Coddy

להתחיל