"git RM --cached x "vs"Git reset head - x"?

GitRef.org -Podstawowa :

git rm usunie wpisy z miejsce postoju. To jest trochę inne from git reset HEAD which " unstages" pliki. Przez "unstage" mam na myśli, że powraca miejsce postoju do tego, co tam było zanim zaczęliśmy coś modyfikować. git rm z drugiej strony po prostu kopie plik w całości ze sceny, więc że nie jest zawarte w następnym Zatwierdź migawkę, a tym samym skutecznie usuwam.

Domyślnie, a git rm file usunie Plik z miejsca postoju w całości, a także z dysku > (katalogu roboczego). Aby pozostawić plik w katalogu roboczym, możesz użyć git rm --cached.

Ale jaka dokładnie jest różnica między git rm --cached asd a git reset head -- asd?

Author: Nick Volynkin, 2011-04-27

3 answers

Są trzy miejsca, gdzie plik, powiedzmy, może być-drzewo, indeks i kopia robocza. Gdy po prostu dodajesz plik do folderu, dodajesz go do kopii roboczej.

Kiedy robisz coś takiego jak git add file dodajesz to do indeksu. A kiedy je popełniasz, dodajesz je również do drzewa.

Prawdopodobnie pomoże Ci poznać trzy bardziej popularne flagi w git reset:

Git reset [--<mode>] [<commit>]

Ten formularz resetuje obecny kierownik oddziału do <commit> i ewentualnie aktualizuje indeks (resetuje go do drzewa <commit>) i drzewo robocze w zależności od <mode>, które musi być jednym z po:
--soft

W ogóle nie dotyka pliku indeksu ani drzewa roboczego (ale resetuje głowa do <commit>, tak jak wszystkie tryby). To pozostawia wszystkie Twoje changed files "zmiany do zatwierdzenia" , jak to określiłby git status.

--mieszane

Resetuje indeks, ale nie drzewo robocze (np. zmienione pliki są zachowane, ale nie oznaczone dla commit) i zgłasza to, co nie zostało aktualizacja. Jest to domyślna akcja.

--hard

Resetuje indeks i drzewo robocze. Wszelkie zmiany w śledzonych plikach w drzewa robocze od {[2] } są odrzucane.

Teraz, gdy zrobisz coś takiego git reset HEAD - to, co robisz, jest git reset HEAD --mixed i "zresetuje" indeks do stanu, który był przed tobą rozpoczęto dodawanie plików / dodawanie modyfikacji do indeksu (poprzez git add ) w tym przypadku kopia robocza i indeks (lub staging) były zsynchronizowane, ale po resecie nastąpiła synchronizacja głowicy i indeksu.

git rm z drugiej strony usuwa plik z katalogu roboczego i indeksu, a po zatwierdzeniu plik jest również usuwany z drzewa. git rm --cached usuwa jednak sam plik z indeksu i przechowuje go w kopii roboczej. Jest to dokładne przeciwieństwo git add file w tym przypadku, wykonane indeks być różne od głowicy i pracy, w tym, że głowica ma wcześniej zatwierdzoną wersję pliku, kopia robocza miał modyfikację las, jeśli w ogóle lub zawartość z głowicy pliku i Usunięto plik z indeksu. Commit teraz zsynchronizuje indeks i drzewo, a plik zostanie usunięty.

 169
Author: manojlds,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-29 23:21:16

Być może przykład pomoże:

git rm --cached asd
git commit -m "the file asd is gone from the repository"

Kontra

git reset HEAD -- asd
git commit -m "the file asd remains in the repository"

Zauważ, że jeśli nic nie zmieniłeś else , drugi commit nic nie zrobi.

 63
Author: Greg Hewgill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-27 03:19:44

git rm --cached file usunie Plik ze sceny. Oznacza to, że po zatwierdzeniu plik zostanie usunięty. git reset HEAD -- file spowoduje po prostu zresetowanie pliku w obszarze przejściowym do stanu, w którym znajdował się commit główny, tzn. cofnie wszelkie zmiany, które zrobiłeś od ostatniego commitowania. Jeśli ta zmiana będzie nowym dodaniem pliku, to będą one równoważne.

 28
Author: yuriks,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-27 03:18:48