Właśnie sklonowałem repozytorium git i sprawdziłem oddział. Pracowałem nad tym, a następnie postanowiłem usunąć wszystkie moje lokalne zmiany, ponieważ chciałem oryginalnej kopii.
Krótko mówiąc, musiałem wykonać następujące dwa polecenia, aby usunąć moje lokalne zmiany
git checkout .
git clean -f
Moje pytanie brzmi,
(1) Czy jest to właściwe podejście do pozbycia się lokalnych zmian, czy proszę dać mi znać właściwe podejście.
(2) kiedy używamy, git reset --hard
ponieważ jestem w stanie zresetować nawet bez tego polecenia
Dzięki
* Rozwiązanie: Najważniejsze zmiany: 26/26: * Zastąpiono wiele niejasnych terminów terminologią specyficzną dla git [śledzone / nieśledzone / przemieszczane / niestopowane]
Gdy wprowadzamy zmiany lokalne, mogą istnieć tylko trzy kategorie plików:
Wpisz 1. Przeniesione śledzone pliki
Wpisz 2. Nieustalone pliki śledzenia
Typ 3. Niestabilizowane nieprześledzone pliki, zwane także nieprześledzonymi plikami
- Staged - Te, które zostaną przeniesione do obszaru staging / Dodano do indeksu
- Śledzone - zmodyfikowane pliki
- UnTracked - nowe pliki. Zawsze bez sceny. Jeśli ustawione, oznacza to, że są śledzone.
Co robią poszczególne polecenia:
git checkout .
- Usuwa TYLKO niestabilizowane pliki śledzone [Typ 2]git clean -f
- Usuwa TYLKO niestabilizowane nieśledzone pliki [Typ 3]git reset --hard
- Usuwa TYLKO etapowe pliki śledzone i pliki niestacjonarne [typ 1, typ 2]git stash -u
- Usuwa wszystkie zmiany [Typ 1, Typ 2, Typ 3]
Wniosek:
Oczywiste jest, że możemy użyć obu
(1) combination of `git clean -f` and `git reset --hard`
LUB
(2) `git stash -u`
aby osiągnąć pożądany rezultat.
Uwaga: Składowanie, ponieważ słowo to oznacza „Przechowuj (coś) bezpiecznie i potajemnie w określonym miejscu”. Zawsze można to odzyskać za pomocą git stash pop
. Zatem wybór pomiędzy powyższymi dwiema opcjami jest wywołaniem programisty.
Dziękuję Christoph i Frederik Schøning.
Edycja: 03/27
Pomyślałem, że warto umieścić notatkę „ strzeż się ”git clean -f
git clean -f
Nie ma powrotu. Użyj -n
lub, --dry-run
aby wyświetlić podgląd zadanych obrażeń.
Jeśli chcesz również usunąć katalogi, uruchom git clean -f -d
Jeśli chcesz po prostu usunąć zignorowane pliki, uruchom git clean -f -X
Jeśli chcesz usunąć zarówno pliki ignorowane, jak i niezignorowane, uruchom git clean -f -x
odniesienie: więcej na git clean
: Jak usunąć lokalne (nieśledzone) pliki z bieżącego drzewa roboczego Git?
Edycja: 05/20/15
Odrzucanie wszystkich lokalnych zatwierdzeń w tym oddziale [Usuwanie lokalnych zatwierdzeń]
Aby odrzucić wszystkie zatwierdzenia lokalne w tej gałęzi, aby lokalna gałąź była identyczna z „nadrzędną” tej gałęzi, po prostu uruchom git reset --hard @{u}
Odniesienie: http://sethrobertson.github.io/GitFixUm/fixup.html
lub zrobić git reset --hard origin/master
[jeśli oddział lokalny jest master
]
Uwaga: 06.12.2015 To nie jest duplikat drugiego pytania SO oznaczonego jako duplikat. To pytanie dotyczy sposobu usuwania lokalnych zmian GIT [usuń dodany plik, usuń zmiany dodane do istniejącego pliku itp. Oraz różne podejścia; Gdzie w drugim wątku SO podaj tylko sposób usunięcia zatwierdzenia lokalnego. Jeśli dodałeś plik i chcesz go usunąć sam, drugi wątek SO nie dyskutuje o nim. Dlatego nie jest to duplikat drugiego]
Edycja: 23.6.2015
Jak przywrócić zatwierdzenie już przekazane do zdalnego repozytorium?
$ git revert ab12cd15
Edytuj: 09.01.2015
Usuń poprzednie zatwierdzenie z oddziału lokalnego i oddziału zdalnego
Przypadek: Właśnie dokonałeś zmiany w lokalnym oddziale i natychmiast przeszedłeś do oddziału zdalnego, Nagle zdałem sobie sprawę, O nie! Nie potrzebuję tej zmiany. Co teraz zrobić?
git reset --hard HEAD~1
[do usunięcia tego zatwierdzenia z lokalnego oddziału]
git push origin HEAD --force
[oba polecenia muszą zostać wykonane. Do usunięcia ze zdalnego oddziału]
Jaka jest gałąź? Jest to obecnie sprawdzony oddział.
Edytuj 09/08/2015 - Usuń lokalne scalanie git :
Jestem w master
oddziale i połączyłem master
oddział z nowo działającym oddziałemphase2
$ git status
# On branch master
$ git merge phase2
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 8 commits.
P: Jak pozbyć się tego scalenia? Próbowałem git reset --hard
i git clean -d -f
oba nie działały.
Jedyne, co zadziałało, to jedno z poniższych:
$ git reset --hard origin/master
lub
$ git reset --hard HEAD~8
lub
$ git reset --hard 9a88396f51e2a068bb7
[sha commit code - ten, który był obecny, zanim nastąpiły wszystkie twoje zatwierdzenia scalania]
git stash -a
[lub --all] ukryje również zignorowane i nieśledzone pliki. git clean -x
wyczyści również zignorowane pliki. git clean -X
wyczyści tylko zignorowane pliki.