git rm
usunie wpisy z miejsce postoju. To jest trochę inne odgit reset HEAD
które „odsłaniają” akta. Przez „scenę” rozumiem, że się cofa miejsce postoju do tego, co tam było zanim zaczęliśmy modyfikować.git rm
z drugiej strony po prostu kopie plik całkowicie poza sceną, więc że nie jest to uwzględnione w następnym zatwierdzić migawkę, a tym samym skutecznie usuwając to.Domyślnie a
git rm file
całkowicie usunie plik z obszaru przejściowego, a także z dysku> (katalog roboczy). Aby pozostawić plik w katalogu roboczym, możesz użyćgit rm --cached
.
Ale czym dokładnie jest różnica git rm --cached asd
i git reset head -- asd
?
Odpowiedzi:
168 za odpowiedź nr 1Są trzy miejsca, w których plik może, na przykład, być - drzewo, indeks i kopia robocza. Po prostu dodajesz plik do folderu, dodajesz go do kopii roboczej.
Kiedy robisz coś takiego git add file
dodajesz go do indeksu. A kiedy go popełniasz, dodajesz go również do drzewa.
Prawdopodobnie pomoże ci poznać trzy bardziej powszechne flagi w git reset:
git reset [-
<mode>
] [<commit>
]Ten formularz resetuje bieżącą gałąź do
<commit>
i ewentualnie aktualizuje indeks (resetując go do drzewa<commit>
) i drzewo robocze w zależności od<mode>
, który musi być jednym z następujący:
--miękkiW ogóle nie dotyka pliku indeksu ani drzewa roboczego (lecz resetuje się głowa do
<commit>
, podobnie jak wszystkie tryby). To pozostawia wszystko zmieniono pliki „Zmiany do zatwierdzenia”, jak ująłby to status git.--mieszany
Resetuje indeks, ale nie działające drzewo (tj. Zmienione pliki są zachowane, ale nie są oznaczone do zatwierdzenia) i zgłasza to, czego nie było zaktualizowane. To jest akcja domyślna.
--ciężko
Resetuje indeks i działające drzewo. Wszelkie zmiany w śledzonych plikach w działające drzewo od
<commit>
są odrzucane.
Teraz, kiedy robisz coś takiego git reset HEAD
- tak naprawdę to robisz git reset HEAD --mixed
i „zresetuje” indeks do stanu sprzed rozpoczęcia dodawania plików / dodawania modyfikacji do indeksu (przez git add
) W takim przypadku kopia robocza i indeks (lub przemieszczanie) 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
usuwa jednak sam plik z indeksu i zachowuje go w kopii roboczej. To jest dokładne przeciwieństwo git add file
W takim przypadku indeks jest inny niżHEAD i działające, w tym, że HEAD ma wcześniej zatwierdzoną wersję pliku, kopia robocza miała modyfikację lasu, jeśli jakakolwiek lub zawartość HEAD pliku, a plik został usunięty z indeksu. Zatwierdzenie teraz zsynchronizuje indeks i drzewo, a plik zostanie usunięty.
63 dla odpowiedzi № 2
Być może przykład pomoże:
git rm --cached asd
git commit -m "the file asd is gone from the repository"
w porównaniu
git reset HEAD -- asd
git commit -m "the file asd remains in the repository"
Pamiętaj, że jeśli niczego nie zmieniłeś jeszcze, drugie zatwierdzenie nic nie zrobi.
28 dla odpowiedzi nr 3
git rm --cached file
będzie usunąć plik ze sceny. Oznacza to, że po zatwierdzeniu plik zostanie usunięty. git reset HEAD -- file
po prostu zresetuje plik w obszarze przemieszczania dookreśl, gdzie było w zatwierdzeniu HEAD, tzn. cofnie wszelkie zmiany, które wprowadziłeś od czasu ostatniego zatwierdzenia. Jeśli ta zmiana zdarzy się podczas dodawania pliku, będą one równoważne.