Jakie jest znaczenie Git Reset - Hard Origin / Master?

224

Zrobiłem git pulli dostałem błąd:

Poniższe działające pliki drzewa zostaną zastąpione przez scalenie ... Proszę przenieść lub usunąć je przed scaleniem.

Aby rozwiązać ten problem, wykonałem następujące czynności:

git fetch
git reset --hard origin/master

Teraz, kiedy to robię git pull, mówi wszystko na bieżąco. Chcę wiedzieć, co dokładnie się stanie po uruchomieniu tych poleceń. Wiem, że git fetchpobiera zmiany z repozytorium zdalnego bez scalania ich z repozytorium lokalnym.

Co to znaczy git reset --hard origin/master? Jak to działa?

Raza
źródło

Odpowiedzi:

414
git reset --hard origin/master

mówi: wyrzuć wszystkie moje zainscenizowane i nieetapowane zmiany, zapomnij o wszystkim w moim obecnym oddziale lokalnym i zrób dokładnie to samo origin/master .

Prawdopodobnie chciałeś o to zapytać przed uruchomieniem polecenia. Podkreśla się destrukcyjną naturę, używając tych samych słów, co w „twardym resecie”.

CB Bailey
źródło
9
Możesz cofnąć ten ruch, używając git reset --hard HEAD@{1}. HEAD@{1}różni się w zależności od sytuacji, więc zaleca się poszukać go w git reflog.
Nils Werner
2
Zauważ, że metoda cofnięcia przeniesienia @ NilsWerner nie przywraca zmian etapowych i niestacjonarnych. Te zniknęły na dobre.
Michael Anderson
3
Pliki etapowe nadal można znaleźć git fsck --lost-found, ale nie zostaną one dołączone do oryginalnej ścieżki pliku i ich sortowanie może być trudne.
CB Bailey,
1
Często przydatne jest zresetowanie lokalnego oddziału głównego do źródła / wzorca, gdy (być może przypadkowo) zatwierdziłeś zmiany w lokalnym oddziale głównym zamiast oddziału lokalnego. Po prostu utwórz lokalny oddział dla najnowszych zatwierdzeń, a następnie zresetuj swojego lokalnego wzorca do origin / master. W razie potrzeby możesz następnie scalić lub zmienić bazę od głównego.
Mike Hopper,
2
lol „podpowiedziany” to świetny sposób na opisanie tego, ponieważ nie jest to
wcale