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?
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.
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 ^^
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.
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;)
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 w2016201720182019, 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.
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.
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.
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.
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
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.
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.
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 ”
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.
Odpowiedzi:
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.
źródło
git checkout --
), spodziewałbym się, że będzie w stanie cofnąć tę operację, być może za pośrednictwemreflog
. Czy to złe oczekiwanie?git checkout folders/subfolders/file
ale przez przypadek wcisnąłem Enterfolder
i 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.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 ^^
źródło
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.
źródło
Niestety zmiany zostały utracone. Twoje prywatne modyfikacje zostaną po prostu nadpisane. Chyba że zrobiłeś to
git stash
przed dokonaniem płatności ...Spójrz na to z jaśniejszej strony: możesz teraz wdrażać rzeczy jeszcze lepiej;)
źródło
Sprawdź lokalną historię w swoim IDE.
źródło
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ę.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 w
2016201720182019, 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.
źródło
Model
niestetyW VSCODE ctrl + z (cofnij) działało dla mnie
Zrobiłem
git checkout .
zamiastgit add .
i wszystkie zmiany w plikach zostały utracone.Ale teraz używając
command + z
na moim Macu, odzyskałem zmiany i zapisałem dla mnie ton pracy.źródło
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.
źródło
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.
źródło
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.
źródło
Zwykle całą swoją pracę mam w folderze skrzynki referencyjnej. Gwarantuje to, że bieżący folder będzie dostępny poza moim komputerem lokalnym i Githubem. Myślę, że to mój kolejny krok, aby zagwarantować „kontrolę wersji” inną niż git. Możesz to zrobić, aby przywrócić plik do poprzednich wersji plików skrzynki referencyjnej
Mam nadzieję że to pomoże.
źródło
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
źródło
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.źródło
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.
źródło
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
źródło
git reflog
tutaj, znalazłem tę odpowiedź, gdy szukałem cofnięciagit checkout HEAD .
- miałem zamiar wpisaćgit reset HEAD .
- właśnie wykonałem `` reset git - miękki HEAD ~ 1 '' i nie wiedziałem ogit reflog
tak mogłem odzyskać pracę, którą wykonałem :)