Po zobaczeniu z wiersza poleceń:
# On branch RB_3.0.10
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: index.htm
Próbuję odrzucić zmiany, wpisując polecenie:
git checkout -- index.htm
ale kiedy ponownie uruchomię status git, wygląda to dokładnie tak samo. Kasa nie działa. czy robię coś źle? Używam GIT 1.6.1.2 w systemie Windows / Cygwin.
# On branch RB_3.0.10
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: index.htm
git checkout HEAD -- index.htm
(wyewidencjonowanie z ostatniego zatwierdzonego stanu, zamiast wyrejestrowania z indeksu) działa?git checkout HEAD -- index.htm
pracował dla mnie!Odpowiedzi:
Dręczyło mnie to od jakiegoś czasu, prawie każde repozytorium, które sprawdzałem, zawierało zmiany, których nie mogłem odrzucić. Krótko mówiąc, próbowałem wszystkich powyższych rozwiązań, ale nic nie działało. Oto, co zrobiłem, aby przywrócić normalne działanie (na komputerze Mac):
źródło
Oto moje doświadczenie, ustaw następujące zmienne w
.git/config
:następnie uruchom
$ git checkout HEAD .
i działa. ale$ git checkout -- .
nie, dziwne!* git w wersji 1.9.3
źródło
Jakie zmiany są
git diff
widoczne w pliku? W systemie Windows widziałem problemy z zakończeniami linii powodujące takie problemy. W takim przypadku spójrz, jakie masz ustawieniagit config core.autocrlf
igit config core.safecrlf
. Istnieje dokumentacja dotycząca tych ustawień .Powiedziałbym, że jeśli używasz
git svn
do integracji z Subversion, upewnij się, żeautocrlf
jest wyłączony. Z tego, co mogę powiedzieć, jest po prostu zepsuty w tej konfiguracji i sprawia, że większość narzędzi uważa, że pliki zostały zmienione, gdy wykonałeś a,checkout
aby cofnąć wszelkie zmiany.Jeśli widzisz problem w miejscu, w którym to robisz
git checkout
, a następniegit status
pokazuje, że plik jest nadal zmodyfikowany igit diff
pokazuje, że plik jest zmodyfikowany w każdym wierszu pliku, to jest to problem, który widzisz.źródło
Myślę, że musisz zdać
-f
Ze strony podręcznika (
man git-checkout
, GIT-CHECKOUT (1)):Na przykład odrzuć zmiany w bieżącej gałęzi i przełącz się na inną:
źródło
-f
do kasy - <nazwa pliku> jak wgit checkout -f -- filename
-f
git checkout -f master
rzucił „Już na„ master ””, ale zmiany zniknęły.Mogą to być zakończenia linii, jak sugeruje @ 1800-information, ale inną możliwością jest to, że różnica (która uniemożliwia przywrócenie tych plików za pomocą polecenia wypisania) polega na trybie pliku. To właśnie mi się przytrafiło. W mojej wersji gita możesz to odkryć za pomocą
I pokaże ci zmiany trybu plików. Jednak nadal nie pozwala ci ich cofnąć, używając kasy, nawet z opcją -f. Do tego użyj też
lub zmień git .config w edytorze tekstu, dodając
Po wykonaniu tej czynności możesz użyć
i plik powinien zniknąć.
(Wszystko to otrzymałem z odpowiedzi na Jak zrobić zmiany trybu ignorowania git (chmod)? I aktualizowanie-pliku-uprawnienia-tylko-w-git )
źródło
Czy korzystasz z OSX czy Windows? Jeśli tak, prawdopodobnie problem polega na tym, że istnieją dwa pliki o tej samej nazwie, z różnymi wielkościami. na przykład. index.htm i Index.htm
Windows i domyślnie OSX używają systemu plików bez rozróżniania wielkości liter, co powoduje konflikt z git z rozróżnianiem wielkości liter.
źródło
Miałem ten problem i po wypróbowaniu wszystkich powyższych nic nie działało.
Udało mi się usunąć katalog, w którym znajdował się plik, a następnie
git status
zrobić i upewnić się, że wszystkie pliki w tym katalogu są teraz oznaczone jako usunięte. Potem po prostu to zrobiłemgit checkout -f
i wszystko wróciło do normy.źródło
Pracowałem nad
libGDX
projektemAndroid Studio
i chciałem odrzucić wszystkie zmiany, które wprowadziłem, i nic mi nie działało, rozwiązanie, które wymyśliłem, polegało na wprowadzeniu wszystkich zmian do nowej gałęzia następnie możesz usunąć
TRASH
oddział, jeśli chcesz.źródło
Miałem ten sam problem, nic z powyższych komentarzy nie działało. Okazało się, że w moim systemie plików wielkość liter nie jest rozróżniana (domyślnie osx, ale okna prawdopodobnie zachowują się tak samo), a plik z dużymi i małymi literami był obecny w tym samym katalogu, z inną zawartością. Ponieważ na moim komputerze obie nazwy wskazywały na ten sam plik, status git zawsze pokazywał modyfikację, bez względu na to, co zrobiłem. Aby rozwiązać problem:
Musiałem usunąć jeden z plików z innego komputera i przesłać go do repozytorium
całkowicie usunąć całą wersję lokalną
zrobić git clone od zera
źródło
Miałem podobny problem, który nie pozwalał mi na odrzucenie plików, które albo nie istnieją, albo zostały zmienione. Używam Visual Studio w pracy i odkryłem, że dzieje się tak podczas przełączania gałęzi, gdy aplikacja jest uruchomiona.
git checkout
a próba odrzucenia nie pomogła. To by nie zadziałało lub po prostu powiedziałoby mi, że nie mam pozwolenia.Rozwiązanie, które zadziałało:
Ponowne uruchamianie jest uciążliwe, ale działało szybciej niż wypróbowanie 100 rzeczy.
źródło
Jest proste rozwiązanie. Jeśli tak się stanie (zwykle z powodu nieoczekiwanego zamknięcia systemu Windows lub zrzutu pamięci) i nie możesz odrzucić zmian, a nawet przełączać się między gałęziami (Git mówi, że nie masz wystarczających uprawnień); w
Windows
środowiskushow all hidden files and folders
z opcji folderów. Przejdź do katalogu GIT (powinien zaczynać się od.git
) i usuń"index.lock"
plik. W takim razie Git powinien pozwolić ci robić wszystko, co chcesz.źródło
Skończyło się na tym, że wykonałem
git stash
a,git stash clean
aby pozbyć się niektórych. Nie widziałem żadnych konfiguracji auto cr / lf w plikach .git / lub ~ / .git.źródło
W moim przypadku nie mogłem odrzucić zmian związanych z katalogiem. np. kiedy uruchomiłem różnicę git, zobaczyłem to:
-Subproject commit fdcccccccccccccccccccccccccccccccccccccc +Subproject commit f1bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
Zadzwoniłem więc do tego katalogu i sprawdziłem w nim status git. To było w stanie odłączonym HEAD. A potem właśnie tam uruchomiłem
git checkout master
. To wszystko naprawiło dla mnie. Ale to nie jest pomocne w przypadku dokładnego scenariusza, o który tutaj pytano.źródło
To stare pytanie, ale wciąż było dla mnie aktualne. Nie znalazłem odpowiedzi, dopóki nie zapytałem w biurze i odkryłem, że problem dotyczy modułów podrzędnych. Kiedy są aktualizowane, a twoje własne repozytorium nie odzwierciedla tych zmian, pokazuje się, że mają różnice, zresetowanie głowy nie pomaga. W takim przypadku uruchom:
To powinno pomóc naprawić rzeczy (w tym konkretnym przypadku)
źródło
Miałem problem z uprawnieniami w systemie Windows i musiałem to zrobić,
icacls containingFolder /reset /t /l /c
a następnie dwukrotnie kliknąć folder, aby odzyskać moje uprawnienia.źródło
Miałem .gitattributes z następującą zawartością:
* text=auto eol=lf
Aby rozwiązać ten problem, edytuj,
.gitattributes
aby usunąć tę linię, która rozluźnia zakończenia linii. Następniegit reset --hard HEAD
przywrócono pliki i.gitattributes
plik.źródło
Dla mnie ten problem pojawił się z połączeniem pobierania obrazu Git-LFS, który został przesłany przez Netlify CMS i obsługiwany inaczej przez ich obsługę Netlify Large Media.
Moim rozwiązaniem było zakomentowanie / usunięcie tych wierszy z mojego
~/.gitconfig
, aby wyglądały jak poniżej, a następniegit status
ponowne sprawdzenie .LUB prawdopodobnie możesz dodać bardziej lokalny filtr przez a
.gitconfig
w katalogu głównym repozytorium i w jakiś sposób nadpisać tam reguły filtrowania dla lfs.Mam nadzieję, że to pomoże komuś.
źródło
Miałem też podobny problem i pomogły mi następujące kroki:
Mam nadzieję, że pomoże to również innym ludziom.
źródło