Powinieneś być w stanie wymusić lokalną wersję do zdalnego repozytorium za pomocą
git push -f <remote> <branch>
(np git push -f origin master
.). Wyjście <remote>
i <branch>
wymusi wypchnięcie wszystkich lokalnych oddziałów, które zostały ustawione --set-upstream
.
Ostrzegamy, że jeśli inne osoby współużytkują to repozytorium, ich historia zmian będzie w konflikcie z nowym. A jeśli mają jakieś lokalne zobowiązania po punkcie zmiany, staną się nieważne.
Aktualizacja : Myślałem, że dodam notatkę dodatkową. Jeśli tworzysz zmiany, które inni sprawdzą, nie jest rzadkością tworzenie gałęzi z tymi zmianami i okresowe wprowadzanie zmian w bazie, aby być na bieżąco z główną gałęzią programistyczną. Po prostu daj innym programistom do zrozumienia, że tak się stanie, aby wiedzieli, czego się spodziewać.
Aktualizacja 2 : Z powodu rosnącej liczby widzów chciałbym dodać dodatkowe informacje na temat tego, co robić, gdy upstream
pojawia się wymuszenie.
Powiedzmy, że sklonowałem twoje repozytorium i dodałem kilka takich zmian:
D ---- E temat
/
Rozwój A ---- B ---- C.
Ale później development
gałąź trafia z rebase
, co spowoduje, że otrzymam błąd taki jak po uruchomieniu git pull
:
Rozpakowywanie obiektów: 100% (3/3), gotowe.
Od <repolokalizacja>
* rozwój oddziału -> FETCH_HEAD
Automatyczne łączenie <plików>
KONFLIKT (treść): Scal konflikt w <lokalizacjach>
Automatyczne scalanie nie powiodło się; naprawić konflikty, a następnie zatwierdzić wynik.
Tutaj mogłem naprawić konflikty commit
, ale to dałoby mi naprawdę brzydką historię popełnień:
Temat C ---- D ---- E ---- F.
/ /
Rozwój A ---- B -------------- C.
Może wyglądać kusząco w użyciu, git pull --force
ale bądź ostrożny, ponieważ pozostawi cię z osieroconymi zatwierdzeniami:
D ---- E temat
Rozwój A ---- B ---- C '
Więc prawdopodobnie najlepszą opcją jest zrobienie git pull --rebase
. Będzie to wymagać ode mnie rozwiązania wszelkich konfliktów, jak poprzednio, ale użyję każdego kroku zamiast popełnienia git rebase --continue
. Na koniec historia zmian będzie wyglądać znacznie lepiej:
Temat D '--- E'
/
Rozwój A ---- B ---- C '
Aktualizacja 3: Możesz również użyć tej --force-with-lease
opcji jako „bezpieczniejszego” forsowania, jak wspomniał Cupcake w swojej odpowiedzi :
Wymuszone wypychanie z „dzierżawą” pozwala, aby wymuszone wypychanie nie powiodło się, jeśli na pilocie pojawią się nowe zatwierdzenia, których się nie spodziewałeś (technicznie rzecz biorąc, jeśli jeszcze nie wprowadziłeś ich do gałęzi zdalnego śledzenia), co jest przydatne, jeśli nie chcesz przypadkowo zastąpić cudzych zobowiązań, o których nawet jeszcze nie wiedziałeś, a po prostu chcesz zastąpić własne:
git push <remote> <branch> --force-with-lease
Możesz dowiedzieć się więcej o tym, jak korzystać --force-with-lease
, czytając dowolne z poniższych:
git push origin --force
działało dla ciebie?