Git Force Push
Ostatnia aktualizacja
Zwykły git push zostaje odrzucony, gdy twoja lokalna gałąź rozeszła się ze zdalną: Git nie nadpisze commitów, których możesz jeszcze nie znać. Force push omija tę kontrolę i sprawia, że zdalna gałąź odpowiada lokalnej. Potrzebujesz go po przepisaniu historii (rebase albo amend), ale może on skasować cudze commity, więc sięgaj po bezpieczniejsze --force-with-lease.
Wypróbuj te polecenia w terminalu online: prawdziwa powłoka w przeglądarce, bez żadnej instalacji.
Składnia
| Polecenie | Co robi |
|---|---|
git push --force | Nadpisuje zdalną gałąź bez żadnej kontroli |
git push -f | Krótka forma --force |
git push --force-with-lease | Wymusza tylko wtedy, gdy w międzyczasie nikt inny nie wypchnął zmian |
git push --force-with-lease origin feature | Bezpieczniejszy force push do wskazanej gałęzi |
--force vs --force-with-lease
| Zachowanie | --force | --force-with-lease |
|---|---|---|
| Nadpisuje zdalną gałąź | Zawsze | Tylko jeśli nie zmieniła się od twojego ostatniego fetch |
| Może skasować cudze commity | Tak | Odmawia, chyba że fetch odświeżył lease |
| Zalecane dla zespołów | Nie | Tak |
Najczęstsze pytania o git force push
Kiedy potrzebny jest force push?
Gdy przepisujesz historię, która już jest w repozytorium zdalnym: po
git rebase, git commit --amend albo interaktywnym rebase, który połączył commity. Twoja lokalna gałąź nie pasuje już do zdalnej historii, więc zwykły push zostaje odrzucony i tylko force push może ją zaktualizować.Czym różni się --force od --force-with-lease?
--force bezwarunkowo nadpisuje zdalną gałąź, co może po cichu usunąć commity wypchnięte przez kolegę z zespołu po twoim ostatnim fetch. --force-with-lease nadpisuje tylko wtedy, gdy zdalna gałąź nadal wskazuje na commit znany z twojego ostatniego fetch; jeśli ktoś inny w międzyczasie coś wypchnął, odmawia i chroni jego pracę. Jedno zastrzeżenie: każdy fetch (także automatyczny fetch w tle w IDE) odświeża lease, więc rób push zaraz po sprawdzeniu repozytorium zdalnego. Mimo to na każdej wspólnej gałęzi wybieraj je zamiast --force.Czy force push jest niebezpieczny?
Może być. Na wspólnej gałęzi zwykłe
--force może nadpisać commity wypchnięte przez innych, czyli w praktyce usunąć ich pracę z repozytorium zdalnego. Na gałęzi, której używasz tylko ty, jest bezpieczny. W razie wątpliwości użyj --force-with-lease, które bezpiecznie się nie powiedzie, zamiast zmiażdżyć niewidziane zmiany.Jak cofnąć force push?
Jeśli stare commity nadal masz lokalnie albo w
git reflog, możesz zresetować do nich gałąź i ponownie zrobić force push, żeby przywrócić poprzedni stan. To kolejny powód, żeby używać --force-with-lease: dzięki niemu przypadkowe nadpisania są dużo mniej prawdopodobne.Czy mogę to przećwiczyć online?
Tak. Otwórz terminal online i uruchom polecenia git push w prawdziwej powłoce w przeglądarce, bez żadnej instalacji. Darmowy interaktywny kurs Git w Coddy też krok po kroku omawia pracę z repozytoriami zdalnymi.