2010-12-14 8 views
11

Mam zmodyfikowany plik, który chcę przywrócić do stanu, który jest w ostatnim zatwierdzeniu, ale jest "zablokowany", zawsze oznaczony jako zmodyfikowany.Nie mogę zresetować pliku do określonego zatwierdzenia za pomocą Git

$ git status 
# On branch master 
# 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.php 
# 
no changes added to commit (use "git add" and/or "git commit -a") 

I spróbuj:

$git checkout -- index.php 

Ale wyjście git status jest wciąż ten sam. I spróbuj:

$git reset --hard master 
HEAD is now at 02c9613 test commit message 

a wyjście git status jest wciąż ten sam.

Jakieś pomysły, w jaki sposób mogę pozbyć się rzekomych zmian w tym pliku?

+0

Jakie są rodzaje modyfikacji? – Cascabel

+2

Jaki jest wynik 'git diff'. Pachnie jak http://stackoverflow.com/search?q=[git]+autocrlf. – Rudi

+0

Różnica pokazuje głównie zmiany końca linii. Zauważ, że nie zmieniłem tego pliku w ogóle. To pochodzi od nowego członka zespołu. Rzucę okiem na link Rudiego. – Julian

Odpowiedz

3

Być może używasz do tego celu whitespace issue wypróbuj .

Jeśli to nie zadziała, powiedziałbym, że wpadłeś na błąd. Zapisz lokalnego klona na przyszłość (mam nadzieję, że nie jest zbyt duży) i stwórz raport o błędzie. Zwłaszcza, że ​​fakty:

  • nie zostały zmodyfikowane plik yourself
  • inne pliki Nie pokazuj tego problemu

są oznaki, że może po prostu nie być, że popełnił błąd tutaj . To, czy uda ci się odtworzyć problem na czystym repo będzie również interesującą informacją.

+0

Sklonował ponownie repozytorium i działa dobrze. Wydaje się jednak, że nie może odtworzyć błędu w nowym repo. Niestety, kod tutaj nie jest open source, więc nie mogę go przesłać w raporcie o błędzie :( – Julian

3

Musisz usunąć index.php z "indeksu". Następnie możesz wypróbować inną wersję.

git rm --cached index.php 

Powinien załatwić sprawę. Zobacz:

http://www.kernel.org/pub/software/scm/git/docs/git-rm.html

+1

Dane wyjściowe 'git status' w języku Julian nie pokazują niczego jako dodanego do indeksu. – jamessan

+0

Mike, kiedy uruchomię polecenie git rm, git chce, żebym zatwierdził zmiany, co wydaje się dziwne, ponieważ nie chcę mieć nic wspólnego z tym plikiem; Po prostu chcę, żeby było dokładnie tak, jak to pokazuje w github. – Julian

1

Czy próbowałeś:

$ git checkout master -f -- index.php 

lub

$ git checkout master -f 

?

Nie rozumiem, dlaczego to działałoby, gdyby nie było reset, ale warto spróbować.

+0

Gauthier, pierwsze polecenie, o którym wspomniałeś, nie miało żadnego efektu. Ale drugi zrobił coś bardzo interesującego. Na początku nic nie zrobiłem, ale postanowiłem zmodyfikować inny plik, a status git oznaczał go jako zmodyfikowany. Po uruchomieniu drugiej sugestii mój zmodyfikowany plik powrócił do stanu pierwotnego, podczas gdy plik index.php pozostał nadal zmodyfikowany! Jestem bardzo blisko klonowania repozytu od początku. – Julian

+0

Sugerowałbym uruchomienie 'git diff' jak zasugerowano powyżej. – Gauthier

+1

"git checkout master -f" pomógł mi! dzięki –

0

FWIW, udało mi się rozwiązać problem, usuwając podkatalogi .git w katalogach, które zostały zmodyfikowane. Po przejściu podkatalogów .git (jako że podkatalogi były projektami .git), foldery nadrzędne nie były już modyfikowane. Jeśli pliki, o których mowa, znajdują się w tym samym folderze co niepowiązany folder .git, może to również mieć wpływ.

1

spróbować git ls-files -m | xargs -i git update-index --assume-unchanged "{}"

+0

Tylko uważaj, będziesz musiał usunąć tę flagę, aby zobaczyć zmiany ponownie używając '--no-assume-unchanged' – d4Rk

0

utknąłem w całkiem sam bałagan. Miałem kilka plików, których nie mogłem się pozbyć w git status. Po próbach resetowania lub kasowania plików w jakikolwiek sposób postanowiłem dodać problematyczne pliki i je zatwierdzić. Git wydawał się być z tego zadowolony. Potem wróciłem do poprzedniego zatwierdzenia i problem został rozwiązany, problematyczne pliki rzeczywiście zniknęły.

To nie wyjaśnia błędu, ale jeśli to rozwiązanie może go rozwiązać, to jest dobre.