$ git reset -- <file_path>
można resetować według ścieżki.Dlaczego git nie może wykonać twardego/miękkiego resetowania według ścieżki?
Jednak $ git reset (--hard|--soft) <file_path>
zgłosi błąd jak poniżej:
Cannot do hard|soft reset with paths.
$ git reset -- <file_path>
można resetować według ścieżki.Dlaczego git nie może wykonać twardego/miękkiego resetowania według ścieżki?
Jednak $ git reset (--hard|--soft) <file_path>
zgłosi błąd jak poniżej:
Cannot do hard|soft reset with paths.
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>
.
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.
git reset --soft HEAD ~ 1 nazwa pliku cofnij zatwierdzenie, ale zmiany pozostają w lokalnym. filename może być - dla wszystkich plików zaangażowani
fatalne "Nie można zrobić miękkiego resetowania ścieżkami" – alt
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ą.
Osobiście uważam, że 'git checkout -' powinien zostać zastąpiony * * z 'git zresetować --hard '. To ma o wiele więcej sensu ... –
vergenzt
'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. –
Proszę spojrzeć na powiązane pytanie: http://stackoverflow.com/questions/15404535/how-to-git-reset-hard-a-subdirectory. Dowolny pomysł? – krlmlr