git odrzuć wszystkie zmiany i ściągnij ze źródła

145

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?

NinjaCowgirl
źródło

Odpowiedzi:

251

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:

git reset --hard origin/master
git pull origin master

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.

Eric Walker
źródło
1
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)

Nevik Rehnel
źródło
1
Może być konieczne wykonanie pociągnięcia po reset --hard.
Eric Walker
Pobieranie z mastera nie jest konieczne, gdy źródło pobierania git zostanie uruchomione przed zresetowaniem.
sciritai
@sciritai: mój komentarz został dodany przed wzmianką o pobieraniu z pochodzenia.
Eric Walker
19

Możesz to zrobić jednym poleceniem:

git fetch --all && git reset --hard origin/master

Lub w parze poleceń:

git fetch --all
git reset --hard origin/master

Pamiętaj , że stracisz WSZYSTKIE lokalne zmiany

Luca C.
źródło
5
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.

wyniki
źródło
0

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)

BitFreak
źródło