Jak mogę pobrać repozytorium nadrzędne i zastąpić je master? Mam tylko jedną gałąź w moim repozytorium, którą jest master, i całkowicie to zepsułem, więc w zasadzie muszę zacząć od początku. Myślę, że init wykona zadanie, ale czy jest łatwiejszy sposób?
Są (przynajmniej) dwie rzeczy, które możesz tutaj zrobić - możesz ponownie klonować zdalne repozytorium lub możesz reset --harddo wspólnego przodka, a następnie wykonać wyciągnięcie, które spowoduje przewinięcie do najnowszego zatwierdzenia na zdalnym serwerze głównym.
Aby być konkretnym, oto proste rozszerzenie oryginalnej odpowiedzi Nevika Rehnela:
UWAGA : użycie git reset --hardspowoduje odrzucenie wszelkich niezatwierdzonych zmian i może być łatwo pomylić się z tym poleceniem, jeśli dopiero zaczynasz korzystać z git, więc upewnij się, że masz pojęcie, co zrobi, zanim przejdziesz dalej.
Więcej pomocy dla nowicjuszy: git gcsprząta i zajmuje się sprzątaniem. Z drugiej strony, nigdy nie biegałem git gc. Miło jest biegać, ale nie jest potrzebne.
Joshua Dance,
@JoshuaDance - słuszna uwaga. Nie jestem pewien, dlaczego pierwotnie to włączyłem.
Eric Walker
23
na gałęzi master:
git reset --hard origin/master
następnie zrób porządki za pomocą git gc(więcej na ten temat w podręcznikach)
Aktualizacja: Prawdopodobnie będziesz musiał również zrobić git fetch origin(lub git fetch origin masterjeśli chcesz tylko tę gałąź); nie powinno mieć znaczenia, czy zrobisz to przed, czy po resecie. (Dzięki @ eric-walker)
git reset <hash> # you need to know the last good hash, so you can remove all your local commits
git fetch upstream
git checkout master
git merge upstream/master
git push origin master -f
voila, teraz twój fork powrócił do tego samego, co upstream.
W końcu zdałem sobie sprawę, że zamiast git fetch --all && git reset --hard origin/mastertego powinno być git fetch --all && git reset --hard origin/<branch_name>, zamiast tego (jeśli pracuje się na innej gałęzi)
git gc
sprząta i zajmuje się sprzątaniem. Z drugiej strony, nigdy nie biegałemgit gc
. Miło jest biegać, ale nie jest potrzebne.na gałęzi master:
git reset --hard origin/master
następnie zrób porządki za pomocą
git gc
(więcej na ten temat w podręcznikach)Aktualizacja: Prawdopodobnie będziesz musiał również zrobić
git fetch origin
(lubgit fetch origin master
jeśli chcesz tylko tę gałąź); nie powinno mieć znaczenia, czy zrobisz to przed, czy po resecie. (Dzięki @ eric-walker)źródło
reset --hard
.Możesz to zrobić jednym poleceniem:
Lub w parze poleceń:
Pamiętaj , że stracisz WSZYSTKIE lokalne zmiany
źródło
voila, teraz twój fork powrócił do tego samego, co upstream.
źródło
W końcu zdałem sobie sprawę, że zamiast
git fetch --all && git reset --hard origin/master
tego powinno byćgit fetch --all && git reset --hard origin/<branch_name>
, zamiast tego (jeśli pracuje się na innej gałęzi)źródło