Pracowałem nad czymś i doszedłem do wniosku, że to kompletnie zepsute ... Wypróbowałem więc następującą sekwencję:
git reset --hard
git rebase origin
git fetch
git pull
git checkout
W którym momencie dostałem wiadomość
Your branch is ahead of 'origin/master' by 2 commits.
Chcę odrzucić moje lokalne zatwierdzenia , bez konieczności czyszczenia mojego lokalnego katalogu i ponownego pobierania wszystkiego. Jak mogę to osiągnąć?
git fetch
agit pull
pull jest kombinacją pobierania i scalania.Odpowiedzi:
usunie wszystkie zatwierdzenia poza miejscem, w
origin/master
którymorigin
znajduje się nazwa repo imaster
nazwa oddziału.źródło
origin/master
to gałąź, która śledzimaster
gałąźorigin
zdalnego repozytorium.origin/master
jest odniesieniem domaster
gałęzi pilota o nazwieorigin
.Na marginesie, oprócz odpowiedzi mipadi (która powinna przy okazji działać), powinieneś wiedzieć, że robiąc:
robi też dokładnie to, czego chcesz
having to redownload everything
( bez parafowania). Jest tak, ponieważ Twoje lokalne repozytorium zawiera kopię zdalnego repozytorium (a ta kopia nie jest taka sama jak lokalny katalog, nie jest nawet taka sama jak wyrejestrowana gałąź).Usunięcie gałęzi jest całkowicie bezpieczne, a odtworzenie tej gałęzi jest bardzo szybkie i nie wymaga żadnego ruchu sieciowego. Pamiętaj, że git to przede wszystkim lokalne repozytorium. Nawet zdalne oddziały mają kopię na komputerze lokalnym. Jest tylko trochę metadanych, które mówią git, że konkretna lokalna kopia jest w rzeczywistości zdalną gałęzią. W git wszystkie pliki są cały czas na dysku twardym.
Jeśli nie masz żadnych oddziałów innych niż master, powinieneś:
źródło
Cannot delete the branch 'master' which you are currently on.
git checkout -b temp;git branch -D master;git checkout master;git branch -D temp
origin/master
jest to na lokalnym komputerze. To twoja lokalna (pełna) kopia zdalnego oddziału. Prawdziwą zdalną gałęzią jestorigin master
.git branch -D master
nie było to jednak konieczne, ponieważ, jak wskazano, generuje błąd.To, co robię, to staram się zresetować mocno do HEAD. Spowoduje to usunięcie wszystkich lokalnych zatwierdzeń:
źródło
^
reprezentuje zatwierdzenie nadrzędne, więc resetowanie w celuHEAD^
odrzucenia niezatwierdzonych zmian i przeniesienie gałęzi do poprzedniego zatwierdzenia, skutecznie „usuwa” ostatnie zatwierdzenie (chociaż zatwierdzenie nadal istnieje, gałąź po prostu go nie wskazuje). Odpowiedź będzie miała tylko jedno zatwierdzenie lokalne, a reszta to niezatwierdzone zmiany. @karim @giangMusisz biec
Aby uzyskać wszystkie zmiany, a następnie nie otrzymasz wiadomości z informacją „Twój oddział jest przed nami”.
źródło
Widziałem przypadki, w których pilot przestał być zsynchronizowany i musiał zostać zaktualizowany. Jeśli a
reset --hard
lubbranch -D
nie działa, spróbujźródło
reset --hard
działa w tej sytuacjireset --hard
powinno tu działać. Jednak po prostu zaznaczam, że czasami nie resetuje gałęzi prawidłowo igit pull origin
ponownie zsynchronizuje pilota i pozwoli nareset --hard
prawidłowe działanie.Musiałem zrobić:
jak powiedział git, że nie istnieje, ponieważ został wyczyszczony za pomocą
źródło