2012-06-26 11 views

Odpowiedz

95

Ponieważ nie ma sensu (inne komendy zapewniają już tę funkcjonalność), a to zmniejsza potencjał robi źle przez przypadek.

"Twardy reset" dla ścieżki jest właśnie wykonywany z git checkout HEAD -- <path> (sprawdzenie istniejącej wersji pliku).

Miękki reset dla ścieżki nie ma sensu.

Zmodyfikowany reset dla ścieżki to to, co robi git reset -- <path>.

+42

Osobiście uważam, że 'git checkout - ' powinien zostać zastąpiony * * z 'git zresetować --hard '. To ma o wiele więcej sensu ... – vergenzt

+18

'git checkout - ' nie wykonuje twardego resetu; zastępuje zawartość drzewa roboczego zawartością etapową. 'git checkout HEAD - ' wykonuje twardy reset ścieżki, zastępując indeks i drzewo robocze wersją z zatwierdzenia HEAD. –

+0

Proszę spojrzeć na powiązane pytanie: http://stackoverflow.com/questions/15404535/how-to-git-reset-hard-a-subdirectory. Dowolny pomysł? – krlmlr

12

Możesz wykonać to, co próbujesz zrobić, używając git checkout HEAD <path>.

Mimo to podany komunikat o błędzie nie ma dla mnie żadnego sensu (ponieważ git reset działa dobrze na podkatalogach) i nie widzę powodu, dla którego git reset --hard nie powinien wykonywać dokładnie tego, o co go prosisz.

-1

git reset --soft HEAD ~ 1 nazwa pliku cofnij zatwierdzenie, ale zmiany pozostają w lokalnym. filename może być - dla wszystkich plików zaangażowani

+4

fatalne "Nie można zrobić miękkiego resetowania ścieżkami" – alt

2

Pytanie jak jest już answered, będę wyjaśniać dlaczego część.

Co robi git reset? W zależności od określonych parametrów, można zrobić dwie różne rzeczy:

  • Jeżeli określić ścieżkę, to zastępuje dopasowane pliki w indeksie z plików z commit (HEAD domyślnie). Ta akcja w ogóle nie wpływa na drzewo robocze i jest zwykle używana jako przeciwieństwo git add.

  • Jeśli nie określić ścieżkę, porusza obecnego szefa oddziału do określonego popełnić i razem z tym, ewentualnie resetuje indeksu i drzewa roboczy do stanu, który popełnił. To zachowanie dodatkowe jest kontrolowane przez parametr trybu:
    --soft: nie dotykaj indeksu i drzewa roboczego.
    --miesza się (domyślnie): resetuje indeks, ale nie działa drzewo.
    --hard: resetowanie indeksu i drzewa roboczego.
    Dostępne są również inne opcje, patrz dokumentacja pełnej listy i niektóre przypadki użycia.

    Gdy nie określasz zatwierdzenia, domyślnie jest to HEAD, więc git reset --soft nic nie da, ponieważ jest to polecenie przeniesienia głowy na HEAD (do jej bieżącego stanu). git reset --hard, z drugiej strony, ma sens z powodu efektów ubocznych , mówi przesunąć głowę na HEAD i zresetować indeks i drzewo robocze do HEAD.

    Myślę, że powinno być już jasne, dlaczego ta operacja nie jest związana z konkretnymi plikami ze względu na swój charakter - ma to na celu przesunięcie głowicy oddziału w pierwszej kolejności, zresetowanie drzewa roboczego i indeks jest funkcją dodatkową.

Powiązane problemy