git cofnij wszystkie niezatwierdzone lub niezapisane zmiany


834

Próbuję cofnąć wszystkie zmiany od czasu ostatniego zatwierdzenia. Próbowałem git reset --hardi git reset --hard HEADpo obejrzeniu tego postu . Odpowiadam, że głowa jest teraz na 18c3773 ... ale kiedy patrzę na moje lokalne źródło, wszystkie pliki wciąż tam są. czego mi brakuje?


1
To świetny zasób prosto z Github: Jak cofnąć (prawie) cokolwiek z Gitem
jasonleonhard

Łatwy do zrozumienia i prosty do odczytania: git-scm.com/book/en/v2/Git-Basics-Undoing-Things
MyTitle

Odpowiedzi:


1619
  • Spowoduje to wycofanie ze sceny wszystkich plików, które mogły zostać przetworzone git add:

    git reset
    
  • Spowoduje to cofnięcie wszystkich lokalnych niezatwierdzonych zmian (należy je wykonać w katalogu głównym repo):

    git checkout .
    

    Możesz także przywrócić niezatwierdzone zmiany tylko do określonego pliku lub katalogu:

    git checkout [some_dir|file.txt]
    

    Jeszcze inny sposób na przywrócenie wszystkich niezatwierdzonych zmian (dłuższy do pisania, ale działa z dowolnego podkatalogu):

    git reset --hard HEAD
    
  • Spowoduje to usunięcie wszystkich lokalnych nieśledzonych plików, więc pozostaną tylko pliki śledzone przez git:

    git clean -fdx
    

    OSTRZEŻENIE: -x usunie również wszystkie ignorowane pliki, w tym te określone przez .gitignore! Możesz użyć -npodglądu plików do usunięcia.


Podsumowując: wykonywanie poniższych poleceń jest zasadniczo równoważne świeżemu git clonez oryginalnego źródła (ale niczego nie pobiera ponownie, więc jest znacznie szybsze):

git reset
git checkout .
git clean -fdx

Typowym zastosowaniem tego są skrypty kompilacji, gdy musisz upewnić się, że twoje drzewo jest absolutnie czyste - nie ma żadnych modyfikacji ani lokalnie tworzonych plików obiektowych ani kompilacji artefaktów, a chcesz, aby działało ono bardzo szybko i nie powodowało ponownego klonuj całe repozytorium za każdym razem.


@turibe to prawda. Musiałem uruchomić projekt kilka razy, ponieważ usuwałem wszystkie pobrane zależności i mój folder .idea. Potrzebujesz lepszego rozwiązania.
EresDev,

2
@EresDev, nie musisz wykonywać git clean, spowoduje to cofnięcie niezatwierdzonych zmian, ale zachowa wszystkie nieśledzone lub dodane pliki. Może to jednak wpłynąć na wynik kompilacji, ponieważ niektóre nieśledzone pliki mogą zakłócać działanie. Np. Co jeśli twój katalog .idea był uszkodzony?
mvp

git resetmówi mi, że mam zmiany, które muszę zapisać
Daniel Springer

1
bieganie git clean -fdxnode_modules.env
usunęło

1
@ fires3as0n Czego jeszcze się spodziewałeś? To musiało się stać. Odpowiedź zawiera także ostrzeżenie.
Rishav

148

Jeśli chcesz „ cofnąć ” wszystkie niezatwierdzone zmiany, po prostu uruchom:

git stash
git stash drop

Jeśli masz jakieś nieśledzone pliki (sprawdź, uruchamiając git status), można je usunąć, uruchamiając:

git clean -fdx

git stashtworzy nową skrytkę, która stanie się skrytką @ {0} . Jeśli chcesz najpierw sprawdzić, możesz uruchomić, git stash listaby zobaczyć listę swoich skrytek. Będzie to wyglądać mniej więcej tak:

stash@{0}: WIP on rails-4: 66c8407 remove forem residuals
stash@{1}: WIP on master: 2b8f269 Map qualifications
stash@{2}: WIP on master: 27a7e54 Use non-dynamic finders
stash@{3}: WIP on blogit: c9bd270 some changes

Każda skrytka nosi nazwę po poprzednim komunikacie zatwierdzenia.


2
Rzeczywiście dobre rozwiązanie, ale trzeba wprowadzać zmiany za pomocą git add .wcześniej, git stashponieważ pokazywało mi to nieproszone zmiany nawet pogit stash
EresDev,

21

jest też git stash- który „ukrywa” twoje lokalne zmiany i może być ponownie zastosowany później lub usunięty, jeśli nie jest już wymagany

więcej informacji o składowaniu


12

Korzystam z drzewa źródeł .... Możesz cofnąć wszystkie niezatwierdzone zmiany, wykonując 2 proste kroki:

1) wystarczy zresetować status pliku obszaru roboczego

wprowadź opis zdjęcia tutaj 2) wybierz wszystkie pliki sceniczne (polecenie + a), kliknij prawym przyciskiem myszy i wybierz usuń

wprowadź opis zdjęcia tutaj

To takie proste: D


Jeśli zresetujesz, a następnie zmienisz gałąź i bazę na zresetowanej gałęzi, będzie to bolało. Resetowanie jest przydatne, ale nie powinno być używane do usuwania niezatwierdzonych zmian. W przypadku upuszczenia niezaangażowanych zmian po prostu schowaj i upuść zapasy.
Dinu Nicolae

10

To co robię jest

git add . (adding everything)
git stash 
git stash drop

Jedna wkładka: git add . && git stash && git stash drop


to jest najlepsze
Madrugada

7

Dla tych, którzy tu dotarli, szukając możliwości cofnięcia git clean -f -d, przez co plik utworzony w środowisku Eclipse został usunięty,

Możesz zrobić to samo z poziomu interfejsu użytkownika, używając polecenia „Przywróć z historii lokalnej” dla odwołania: Przywróć z historii lokalnej


3
Nie głosowałem za odrzuceniem, jednak twoja odpowiedź jest mniej niż jasna co do twoich intencji; pomogłoby to przeredagować pierwsze zdanie w odpowiedzi.
Mark Schultheiss,

5

Państwa przechodzące z jednego zatwierdzenia do nowego zatwierdzenia

0. last commit,i.e. HEAD commit
1. Working tree changes, file/directory deletion,adding,modification.
2. The changes are staged in index
3. Staged changes are committed

Działanie na rzecz zmiany stanu

0->1: manual file/directory operation
1->2: git add .
2->3: git commit -m "xxx"

Sprawdź różnicę

0->1: git diff
0->2: git diff --cached
0->1, and 0->2: git diff HEAD
last last commit->last commit: git diff HEAD^ HEAD

Cofnij do ostatniego zatwierdzenia

2->1: git reset
1->0: git checkout .     #only for tracked files/directories(actions include modifying/deleting tracked files/directories)
1->0: git clean -fdx     #only for untracked files/directories(action includes adding new files/directories)
2->1, and 1->0: git reset --hard HEAD

Odpowiednik git clone, bez ponownego pobierania czegokolwiek

git reset && git checkout . && git clean -fdx

Nie rozumiem, w jaki sposób odnosi się to do zadanego pytania. To tylko seria dziwnych przepisów, bez żadnej prawdziwej substancji.
mvp
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.