Cofnąć „git add <katalog>”?

186

Przez pomyłkę dodałem pliki za pomocą polecenia „git add dir”. Nie uruchomiłem jeszcze „git commit”. Czy istnieje sposób na usunięcie tego katalogu i wszystkich zawartych w nim plików z zatwierdzenia?

Próbowałem git reset dir, ale to nie zadziałało. Najwyraźniej git reset filejest to sposób na jego cofnięcie. Ale mam tak wiele plików i tak mało czasu.

neoneye
źródło
6
git reset <path>aktualizuje indeks dla tej ścieżki, aby pasował HEAD(bieżący zatwierdzenie). Nie dotyka działającego drzewa.
Cascabel,

Odpowiedzi:

279

Aby usunąć katalog i wszystkie zawarte w nim elementy z indeksu,

git rm --cached -r dir

Te --cachedmarki przełączników git rmdziałać na indeksie i nie dotykać kopię roboczą. -rPrzełącznik sprawia, że rekurencyjne.

Arystoteles Pagaltzis
źródło
12
„Usunięcie całego katalogu przemieszczanego z indeksu” byłoby nieco lepszym wyjaśnieniem polecenia git, ponieważ dla początkujących git, takich jak ja, polecenie wygląda bardzo podobnie, jakby mogło nawet usunąć katalog z systemu plików. Tylko kwestia gustu.
Sascha Gottfried
1
Właśnie dlatego pogrubiłem --cachedprzełącznik. Niemniej jednak zredagowałem odpowiedź, aby stwierdzić, że ma ona zastosowanie tylko do indeksu.
Arystoteles Pagaltzis
@SaschaGottfried dziękuję za wyjaśnienie, na początku bałam się nawet edycji, ale twój komentarz wyjaśnił :)
Max von Hippel
prawie usunąłem cały folder: S po tym ... git reset HEAD foldernaprawiłem wszystko ... ale zanim to zrobisz, zrób git status folderi upewnij się, że napisał, że „usunął” wszystkie pliki w tym folderze
Bengalaa
21

Będziesz chciał użyć git rm --cached -r <dir>. to polecenie usunie zawartość katalogu przemieszczanego z indeksu.

jeśli katalog był już śledzony, musisz ręcznie znaleźć nowe i stare pliki i cofnąć je…

Prawdopodobnie git reset <dir>po tym uruchom ponownie , aby zresetować istniejące (i już śledzone) pliki w katalogu.


Aktualizacja 2019:

Po prostu uruchom git reset directory, odrzuci wszystkie nowo dodane pliki.

knittl
źródło
nie jest git reset <dir>sam?
Bananach
@Bananach Właśnie próbowałem i wydaje się, że tak, git reset <dir>to też zadziała. Odpowiedź pochodzi z 2011 roku, więc nie jestem pewien, czy zadziałało to już 8 lat temu. Zaktualizuję odpowiedź. Dzięki za podpowiedź!
knittl
11

Katalog sceniczny

$ git reset <dir>

Sceny wszystkie pliki i foldery, które przygotowałem:

$ git add <dir>

Potwierdź, że katalog jest niestabilny

Aby potwierdzić usunięcie katalogu i jego zawartości ze środowiska pomostowego (tj. „Zmiany do zatwierdzenia”), uruchom poniższe polecenie:

$ git status

lub

$ git diff --staged --name-only 

w celu potwierdzenia, że ​​żaden z folderów lub plików wcześniej zainscenizowanych nie jest nadal przemieszczany.

mrduncle1
źródło
2

Jednym prostym poleceniem, aby usunąć przemieszczony plik / folder, który nie został jeszcze zatwierdzony, jest - git restore --staged <dir>.

wprowadź opis zdjęcia tutaj

Tofan Jena
źródło