Istnieją trzy miejsca, w których może znajdować się plik - powiedzmy, drzewo, indeks i kopia robocza. Kiedy dodajesz plik do folderu, dodajesz go do kopii roboczej.
Kiedy robisz coś takiego git add file
, dodajesz to do indeksu. A kiedy to zatwierdzasz, dodajesz to również do drzewa.
Prawdopodobnie pomoże ci to poznać trzy bardziej powszechne flagi w resetowaniu git:
reset git [- <mode>
] [ <commit>
]
Ten formularz resetuje nagłówek bieżącej gałęzi do <commit>
i prawdopodobnie aktualizuje indeks (resetując go do drzewa <commit>
) i drzewo robocze w zależności od tego <mode>
, które musi być jednym z następujących:
--soft
W ogóle nie dotyka pliku indeksu ani drzewa roboczego (ale resetuje głowicę do <commit>
, tak jak robią to wszystkie tryby). To pozostawia wszystkie zmienione pliki jako „Zmiany do zatwierdzenia”, jak określiłby to status git.
--mieszany
Resetuje indeks, ale nie drzewo robocze (tj. Zmienione pliki są zachowane, ale nie są oznaczone do zatwierdzenia) i informuje, co nie zostało zaktualizowane. To jest akcja domyślna.
--ciężko
Resetuje indeks i drzewo robocze. Wszelkie zmiany w śledzonych plikach w drzewie roboczym <commit>
są odrzucane.
Teraz, gdy zrobisz coś takiego git reset HEAD
- to, co faktycznie robisz, git reset HEAD --mixed
to „zresetuje” indeks do stanu, w jakim był przed rozpoczęciem dodawania plików / dodawania modyfikacji do indeksu (przez git add
). W tym przypadku kopia robocza i plik index (lub staging) były zsynchronizowane, ale HEAD i indeks zostały zsynchronizowane po zresetowaniu.
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
jednak usuwa plik z samego indeksu i zachowuje go w kopii roboczej. Jest to dokładne przeciwieństwo git add file
W tym przypadku, utworzyłeś indeks różniący się od HEAD i działającego, w którym HEAD ma wcześniej zatwierdzoną wersję pliku, kopia robocza miała ostatnią modyfikację, jeśli w ogóle, lub zawartość z HEAD plik i usunąłeś plik z indeksu. Zatwierdzenie teraz zsynchronizuje indeks i drzewo, a plik zostanie usunięty.
git rm --cached
git diff
git diff --cached
git status
Untracked