Może git cofnąć wyewidencjonowanie plików niestacjonarnych

164

Przypadkowo odrzucam zmiany w plikach w moim lokalnym drzewie roboczym za pośrednictwem usługi Git Checkout. Pliki nie są obecnie przemieszczane. Czy można „cofnąć” to zamówienie?

Herr W.
źródło
Nie, nie możemy, ale jeśli używasz zaćmienia, możemy sprawdzić Zespół -> Historia lokalna
USM

Odpowiedzi:

106

Uważam, że jeśli plik jest zmodyfikowany, ale jeszcze nie dodany (wystawiony), jest czysto „prywatny”.
Oznacza to, że nie może zostać przywrócone przez GIT, jeśli zostanie nadpisane indeksem lub wersją HEAD (chyba że masz gdzieś kopię swojej bieżącej pracy). "

Treść „prywatna” jest widoczna tylko w Twoim bieżącym katalogu, ale nie jest w żaden sposób zarejestrowana w Gicie.

VonC
źródło
5
Rozumiem, że zmiany w pliku „prywatnym” nie mogą zostać cofnięte przez git. Jeśli jednak plik został zmodyfikowany przez git (np. Przez git checkout --), spodziewałbym się, że będzie w stanie cofnąć tę operację, być może za pośrednictwem reflog. Czy to złe oczekiwanie?
Ciprian Tomoiagă
2
@CiprianTomoiaga reflog służy do przeszłych zatwierdzeń bez odniesienia . Jeśli to, co chcesz przywrócić, nie zostało zatwierdzone (lub wystawione), reflog ci nie pomoże.
VonC
3
@CiprianTomoiaga w przypadku jakichkolwiek prywatnych treści (jeszcze nie dodanych), polegasz wyłącznie na swoim edytorze lub funkcji IDE. Przykład zaćmienia: help.eclipse.org/neon/ ...
VonC
5
Łał! Niewiarygodne. Musiałem wyewidencjonować jeden plik, więc chciałem pisać, git checkout folders/subfolders/fileale przez przypadek wcisnąłem Enter folderi straciłem całą swoją pracę. / znajduje się 1 cm od klawisza enter na mojej klawiaturze i często przełączam się między maszynami z różnymi układami klawiatury, więc często mam 10-15 minut, aby moje palce przyzwyczaiły się do nowych pozycji. Trudno uwierzyć w 2018 roku, że git trashuje pliki, chociaż w książce git jest napisane, że git robi wszystko, aby nie stracić pracy.
gman,
1
@gman Czy poniższa odpowiedź na temat „historii lokalnej” dostarczona przez IDE pomoże Ci odzyskać pracę?
VonC,
174

Jeśli używasz „profesjonalnego” środowiska IDE, są duże szanse, że możesz przywrócić pliki z lokalnej historii. Na przykład w Rubymine możesz kliknąć pliki prawym przyciskiem myszy i obejrzeć historię zmian niezależnych od zmian gita, zapisała mnie teraz kilka razy ^^

Christoph Geschwind
źródło
37
FYI ta funkcja jest dostępna w całej rodzinie „profesjonalnych” IDE JetBrains: Pycharm, IDEA, PHPStorm, Webstorm. Uratowałem dzisiaj mój bakken. Dzięki, Christoph!
Ben Roberts
6
Muszę ci podziękować. Używam WebStorm i zupełnie zapomniałem o tej funkcji, mimo że używam jej dość często. Byłem tak pochłonięty utratą kodu, że nie myślałem o tym!
Tyson Phalp
8
W Eclipse możesz kliknąć plik prawym przyciskiem myszy -> porównać z -> lokalną historią
Maragues
5
wspaniały. Sublime2 undo również cofnął zmiany dokonane przez przypadkowe pobranie Git na dysku.
shuckc
8
Jeśli ktoś stwierdzi, że ten wątek zniszczył część pracy w XCode, istnieje sposób na uzyskanie historii automatycznego zapisywania. Sam XCode nie ma pozycji menu umożliwiającej wyświetlenie historii automatycznego zapisywania, ale przechowuje ją. Jeśli otworzysz dane pliki w TextEdit, możesz cofnąć i przejrzeć historię automatycznego zapisywania w menu Plik> Przywróć.
qingu
66

Jeśli pracujesz w edytorze takim jak Sublime Text i masz nadal otwarty plik, możesz nacisnąć ctrl + z, a powróci on do stanu, który miał przed git checkout.

roman-roman
źródło
9
Ta odpowiedź uratowała mój dzień. Wielkie dzięki!
feyyaz
Natknąłem się na tę poprawkę przez przypadek właśnie teraz i miałem zamieścić nową odpowiedź. Wygląda na to, że Sublime przechwytuje Git zmieniający stan pliku w historii jego modyfikacji.
Timmah
Pracował dla mnie w Ecipse.
Anomalia
4
Pracował też dla Visual Studio Code
intotecho
44

Niestety zmiany zostały utracone. Twoje prywatne modyfikacje zostaną po prostu nadpisane. Chyba że zrobiłeś to git stashprzed dokonaniem płatności ...

Spójrz na to z jaśniejszej strony: możesz teraz wdrażać rzeczy jeszcze lepiej;)

Marcin Gil
źródło
26

Sprawdź lokalną historię w swoim IDE.

Marcin Szymczak
źródło
Po prostu popełniłem błąd, nie wystawiając zmian i wymusiłem kasę. Sprawdziłem historię lokalną w Android Studio (widok -> ostatnie zmiany) i cofnąłem ostatnie zmiany, które wprowadziłem. Więcej informacji tutaj jetbrains.com/help/idea/2016.3/...
Emen
Działa to doskonale w RubyMine, operacja wymazania zmian będzie określana jako „Zmiana zewnętrzna”. Wielkie dzięki za tego Marcina, zaoszczędził mi to godzinę straconej pracy!
AndrewSouthpaw
25

Tworzysz na OS X? Używasz Xcode? Prawdopodobnie będziesz mieć szczęście!

Jak opisano w komentarzu qungu , OS X utrzymuje automatycznie zapisaną historię wersji plików, nawet jeśli nie używasz wehikułu czasu .

Tak więc, jeśli nieostrożnie zdmuchnąłeś swoje niestacjonarne zmiany lokalne git checkout ., oto jak prawdopodobnie możesz odzyskać całą swoją pracę.

Jeśli ktoś stwierdzi, że ten wątek zniszczył jakąś pracę w XCode, istnieje sposób na uzyskanie historii AutoSave. Sam XCode nie ma pozycji menu umożliwiającej wyświetlenie historii automatycznego zapisywania, ale przechowuje ją. Jeśli otworzysz dane pliki w TextEdit, możesz cofnąć i przejrzeć historię automatycznego zapisywania w menu Plik> Przywróć.

Co jest niesamowite, wczoraj odzyskałem dla mnie około dnia pracy.


Możesz zapytać: „Dlaczego nie ma interfejsu wiersza poleceń git, głównego systemu VCS używanego do inżynierii oprogramowania w2016 2017 20182019, przynajmniej utworzyć kopię zapasową plików przed ich usunięciem? Jak, wiesz, dobrze napisane narzędzia programowe przez ostatnie trzy dekady ”.

A może zapytasz: „Dlaczego ta niesamowita funkcja historii plików jest dostępna w TextEdit, ale nie w Xcode, gdzie naprawdę jej potrzebuję?”

… I myślę, że obie te rzeczy wiele wam powiedzą o naszej branży. A może pójdziesz i naprawisz te narzędzia. Co byłoby super.

Benjohn
źródło
2
Mogę potwierdzić, że to działa. To właśnie zaoszczędziło mi wielu godzin pracy!
Bruno Rocha
u mnie nie zadziałało, ponieważ chodziło o plik Modelniestety
brahimm
@brahimm the Model?
Benjohn
1
To właśnie uratowało mi tonę bólu serca. Dziękuję bardzo.
squarefrog
1
Bardzo interesujące: kliknąłem prawym przyciskiem myszy plik źródłowy i spojrzałem na menu „Otwórz za pomocą”. Do wyboru były zarówno TextEdit 1.14, jak i TextEdit 1.6. Tylko TextEdit 1.14 miał opcję powrotu do starszych wersji. Interfejs użytkownika był bardzo fajny, podobnie jak TimeMachine.
bugloaf
7

W VSCODE ctrl + z (cofnij) działało dla mnie

Zrobiłem git checkout .zamiast git add .i wszystkie zmiany w plikach zostały utracone.

Ale teraz używając command + zna moim Macu, odzyskałem zmiany i zapisałem dla mnie ton pracy.

ishab acharya
źródło
czy jest inny sposób?
Abdul Manan
3

Jeśli kiedykolwiek wcześniej zapisałeś zmiany (na przykład przed zmianą bazy), to prawdopodobnie pomoże

Jak odzyskać upuszczoną skrytkę w Git?

nawet jeśli już „ukryłeś” zmiany.

iksa
źródło
2

Skutecznym ratownikiem w tego typu sytuacjach jest Time Machine (OS X) lub podobny system kopii zapasowych oparty na czasie. Uratowało mnie to kilka razy, ponieważ mogę wrócić i przywrócić tylko ten jeden plik.

sscirrus
źródło
1
Drogi przeciwniku - czy mógłbyś wyjaśnić, jak mogę ulepszyć tę odpowiedź?
sscirrus
1

Właśnie to mi się przydarzyło, sprawdziłem cały folder zawierający godziny pracy! Na szczęście odkryłem, że moje IDE Netbeans przechowuje historię każdego pliku, co pozwoliło mi odzyskać 99% rzeczy, mimo że musiałem naprawić kilka rzeczy ręcznie.

Pierre-Verthume Larivière
źródło
0

Technicznie tak. Ale tylko w niektórych przypadkach. Jeśli na przykład masz stronę kodową w górę i trafisz na git checkout i zdajesz sobie sprawę, że przypadkowo sprawdziłeś niewłaściwą stronę lub coś w tym stylu. Przejdź do strony i kliknij cofnij. (dla mnie polecenie + z) i wróci dokładnie do miejsca, w którym byłeś, zanim trafisz na stary dobry, dobry checkout gita.

To nie zadziała, jeśli Twoja strona została zamknięta, a następnie trafisz do kasy git. Działa tylko wtedy, gdy aktualna strona kodowa jest otwarta

kdweber89
źródło
0

Jeśli pracujesz z terminala / cmd prompt otwarty i używany żadnych poleceń git że byłby pokazał Unstaged zmiany ( diff, add -p, checkout -p, etc.), a nie zamknięty terminal / cmd szybka, ponieważ Znajdziesz Unstaged zmian są nadal dostępne, jeśli przewiniesz w górę do miejsca, w którym uruchomiłeś te wyżej wymienione polecenia git.

but
źródło
0

Koleś,

powiedzmy, że jesteś bardzo szczęśliwym facetem, tak jak ja, wróć do edytora i zrób cofnij (polecenie + Z dla mac), powinieneś zobaczyć utraconą zawartość w pliku. Mam nadzieję, że ci to pomogło. Oczywiście zadziała to tylko w przypadku istniejących plików.

codemania23
źródło
-1

Może twoje zmiany nie zostały utracone. Zaznacz „git reflog”

Cytuję poniższy artykuł:

„Zasadniczo każdą czynność wykonywaną w Git, w którym przechowywane są dane, można znaleźć w reflogu. Git bardzo się stara, aby nie utracić danych, więc jeśli z jakiegoś powodu sądzisz, że tak jest, są szanse, że możesz je wykopać używając git reflog ”

Patrz szczegóły:

http://gitready.com/intermediate/2009/02/09/reflog-your-safety-net.html

robertobado
źródło
3
Nie rób sobie nadziei - get reflog pomaga tylko wtedy, gdy wchodzisz w interakcję z git w znaczący sposób. Po prostu edytujesz plik, a następnie usuniesz go za pomocą usługi Git Checkout? git nigdy nie miał szans.
Bob Gilmore,
1
+1 ode mnie - myślę, że warto wspomnieć git reflogtutaj, znalazłem tę odpowiedź, gdy szukałem cofnięcia git checkout HEAD .- miałem zamiar wpisać git reset HEAD .- właśnie wykonałem `` reset git - miękki HEAD ~ 1 '' i nie wiedziałem o git reflogtak mogłem odzyskać pracę, którą wykonałem :)
Russell England
1
Niestety git checkout <revision> i git checkout <path> to dwa zupełnie różne i niepowiązane polecenia. Pierwsza z nich zachowuje lokalne zmiany, druga nie.
Jezioro