Masz na myśli „zresetuj to, co było tam wcześniej” lub „usuń, ponieważ nie chcę już tego pliku”?
Andrew Aylett,
W moim przypadku jest tak samo, ponieważ plik nie istniał wcześniej ...
hcs42
Odpowiedzi:
504
Chcesz:
git rm --cached [file]
Pominięcie tej --cachedopcji spowoduje również usunięcie jej z działającego drzewa. git rmjest nieco bezpieczniejszy niż git reset, ponieważ zostaniesz ostrzeżony, jeśli zawartość przemieszczana nie pasuje do końcówki gałęzi lub pliku na dysku. (Jeśli nie, musisz dodać --force.)
Działa to również świetnie, jeśli np. Przypadkowo zaznaczyłeś jakieś pośrednie kompilacje lub lokalne pliki konfiguracyjne, które nie dostały się do twojego .gitignore; użyj, git rm --cachedaby usunąć je z repozytorium, dodać odpowiednie pliki lub katalogi do .gitignore, wyrenderować i zatwierdzić jak zwykle. Zostaną usunięte z repozytorium, ale pozostaną nietknięte w twoim lokalnym drzewie i nie będziesz ich przypadkowo sprawdzał.
Ionoclast Brigham,
22
Spowoduje to również usunięcie pliku z repo (zdalnego) po zatwierdzeniu i wypchnięciu.
proszek 366
6
To nie usuwa go z indeksu, ale oznacza jako usunięte z indeksu.
JotaBe
4
Ta odpowiedź jest prawdopodobnie błędna, ponieważ usuwa plik z repozytorium (jak już wspomniano @ powder366), co nie jest zamierzonym rezultatem.
otomo
1
To rozwiązanie nie działało dla mnie. Oznaczono określony plik jako usunięty, a następnie usuwa go z lokalnego repozytorium.
paiego
134
Powinno to rozpakować <plik> dla Ciebie (bez usuwania lub modyfikowania pliku w inny sposób):
W zależności od przepływu pracy może to być coś, czego tak rzadko potrzebujesz, że nie ma sensu próbować znaleźć rozwiązania wiersza polecenia (chyba że z jakiegoś powodu pracujesz bez interfejsu graficznego).
Wystarczy użyć jednego z narzędzi opartych na graficznym interfejsie użytkownika, które obsługują zarządzanie indeksami, na przykład:
git gui <- używa frameworka okien Tk - podobny styl gitk
git cola <- bardziej nowoczesny interfejs GUI
Umożliwiają one przenoszenie plików do indeksu i opuszczanie go przez wskazywanie i klikanie. Obsługują nawet wybieranie i przenoszenie części pliku (pojedyncze zmiany) do iz indeksu.
Co powiesz na inną perspektywę: Jeśli popsuniesz się podczas korzystania z jednego z sugerowanych, raczej tajemniczych poleceń:
git rm --cached [file]
git reset HEAD <file>
... masz prawdziwą szansę na utratę danych - a przynajmniej utrudnienie znalezienia. Chyba że naprawdę musisz to robić z bardzo wysoką częstotliwością, korzystanie z narzędzia GUI może być bezpieczniejsze .
Praca bez indeksu
Na podstawie komentarzy i głosów zdałem sobie sprawę, że wiele osób cały czas korzysta z indeksu. Ja nie. Oto jak:
Zatwierdź cały mój egzemplarz roboczy (typowy przypadek): git commit -a
Zatwierdź tylko kilka plików: git commit (list of files)
Zatwierdź wszystkie zmodyfikowane pliki oprócz kilku: git commit -anastępnie wprowadź zmiany za pomocągit gui
Przejrzyj graficznie wszystkie zmiany w kopii roboczej: git difftool --dir-diff --tool=meld
@Martin: Myślę, że to zależy od twojego przepływu pracy. W moim podejściu nigdy nie używam indeksu bezpośrednio. Kiedy chcę zapisać swoją pracę, po prostu robię pełne zobowiązania git commit -a. Kiedy odpowiadałem na to pytanie, dzieje się tak dlatego, że zrobiłem (egzotyczny) „ odwrotny cherry pick ”, który umieszcza pliki w indeksie dla ciebie, ale chciałem edytować plik przed jego zatwierdzeniem. Wyjąłem plik z indeksu podczas edycji, aby różnice działały tak, jak kiedyś.
nobar
mój przypadek użycia był bardzo wąski i bezużyteczny: utwórz gałąź; dodaj folder wypełniony plikami tylko dla oddziału; przełączyć na master; łączyć; ops, dodano niewłaściwy folder do opanowania, dodaj go do gitignore; pliki nie byłyby usuwane z zatwierdzenia - oczywiście, lepszym rozwiązaniem byłoby użycie rmod razu, ale najpierw pomyślałem, że zmiana gałęzi nie zabije zignorowanego folderu. ale ... używam narzędzia „opartego na gui” github, które jest dla mnie wystarczająco dobre i obsługuję zarządzanie indeksem, ale nie obsługuje tego. więc co, powinienem używać 2 GUI do wąskiego użytku? wciąż nie mogę się zgodzić z odpowiedzią.
cregox
3
To zdecydowanie niepopularna odpowiedź. Jestem jednak całkiem pewien, że proponowane przeze mnie podejście jest odpowiednie dla niektórych osób (w tym mnie). Używam jednego z tych narzędzi do manipulowania indeksem kilka razy w roku.
nobar 20.04.16
1
Obecnie edytory programistyczne i środowiska IDE mogą obsługiwać graficzną manipulację indeksem. Tak przynajmniej GitHub's Atom .
nobar
1
Wolę interfejs cli niż GUI każdego dnia, nawet jeśli jest to bardziej niebezpieczne. Pozwoli mi to używać git nawet bez GUI, co sprawia mi przyjemność (zamiast zgubić się, gdy nie mogę na przykład zainstalować takich narzędzi na zdalnym serwerze). Wszystko, co mówiło, że ta odpowiedź jest całkowicie poprawna i nie zasługuje na głosowanie „elitarystów”, +1 za zapewnienie dobrej alternatywy dla gui!
Odpowiedzi:
Chcesz:
Pominięcie tej
--cached
opcji spowoduje również usunięcie jej z działającego drzewa.git rm
jest nieco bezpieczniejszy niżgit reset
, ponieważ zostaniesz ostrzeżony, jeśli zawartość przemieszczana nie pasuje do końcówki gałęzi lub pliku na dysku. (Jeśli nie, musisz dodać--force
.)źródło
git rm --cached
aby usunąć je z repozytorium, dodać odpowiednie pliki lub katalogi do .gitignore, wyrenderować i zatwierdzić jak zwykle. Zostaną usunięte z repozytorium, ale pozostaną nietknięte w twoim lokalnym drzewie i nie będziesz ich przypadkowo sprawdzał.Powinno to rozpakować <plik> dla Ciebie (bez usuwania lub modyfikowania pliku w inny sposób):
źródło
HEAD
.HEAD
!do usuwania określonego pliku z indeksu.
i
git reset HEAD
do usuwania wszystkich indeksowanych plików.
źródło
W zależności od przepływu pracy może to być coś, czego tak rzadko potrzebujesz, że nie ma sensu próbować znaleźć rozwiązania wiersza polecenia (chyba że z jakiegoś powodu pracujesz bez interfejsu graficznego).
Wystarczy użyć jednego z narzędzi opartych na graficznym interfejsie użytkownika, które obsługują zarządzanie indeksami, na przykład:
git gui
<- używa frameworka okien Tk - podobny stylgitk
git cola
<- bardziej nowoczesny interfejs GUIUmożliwiają one przenoszenie plików do indeksu i opuszczanie go przez wskazywanie i klikanie. Obsługują nawet wybieranie i przenoszenie części pliku (pojedyncze zmiany) do iz indeksu.
Co powiesz na inną perspektywę: Jeśli popsuniesz się podczas korzystania z jednego z sugerowanych, raczej tajemniczych poleceń:
git rm --cached [file]
git reset HEAD <file>
... masz prawdziwą szansę na utratę danych - a przynajmniej utrudnienie znalezienia. Chyba że naprawdę musisz to robić z bardzo wysoką częstotliwością, korzystanie z narzędzia GUI może być bezpieczniejsze .
Praca bez indeksu
Na podstawie komentarzy i głosów zdałem sobie sprawę, że wiele osób cały czas korzysta z indeksu. Ja nie. Oto jak:
git commit -a
git commit (list of files)
git commit -a
następnie wprowadź zmiany za pomocągit gui
git difftool --dir-diff --tool=meld
źródło
git commit -a
. Kiedy odpowiadałem na to pytanie, dzieje się tak dlatego, że zrobiłem (egzotyczny) „ odwrotny cherry pick ”, który umieszcza pliki w indeksie dla ciebie, ale chciałem edytować plik przed jego zatwierdzeniem. Wyjąłem plik z indeksu podczas edycji, aby różnice działały tak, jak kiedyś.rm
od razu, ale najpierw pomyślałem, że zmiana gałęzi nie zabije zignorowanego folderu. ale ... używam narzędzia „opartego na gui” github, które jest dla mnie wystarczająco dobre i obsługuję zarządzanie indeksem, ale nie obsługuje tego. więc co, powinienem używać 2 GUI do wąskiego użytku? wciąż nie mogę się zgodzić z odpowiedzią.