Usuń plik z repozytorium Git bez usuwania go z lokalnego systemu plików

Mój początkowy commit zawierał pliki dziennika. Dodałem *log do mojego .gitignore, a teraz chcę usunąć Pliki dziennika z mojego repozytorium.

git rm mylogfile.log

Usunie plik z repozytorium, ale również usunie go z lokalnego systemu plików.

Jak mogę usunąć ten plik z repo bez usuwania mojej lokalnej kopii pliku?

Author: Brian Tompsett - 汤莱恩, 2009-07-17

9 answers

Dla pojedynczego pliku:

git rm --cached mylogfile.log

Dla pojedynczego katalogu:

git rm --cached -r mydirectory
 3587
Author: bdonlan,
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
2018-03-18 23:51:30

Aby usunąć cały folder z repo( jak pliki Resharper), wykonaj następujące czynności:

git rm -r --cached folderName

Popełniłem kilka plików resharper i nie chciałem, aby były one utrzymywane dla innych użytkowników projektu.

 253
Author: Sam Tyson,
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
2012-10-02 09:25:13

Możesz także usunąć Pliki z repozytorium na podstawie Twojego .gitignore bez usuwania ich z lokalnego systemu plików:

git rm --cached `git ls-files -i -X .gitignore`

Lub, alternatywnie, na Windows Powershell:

git rm --cached $(git ls-files -i -X .gitignore)
 168
Author: Techbrunch,
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
2017-12-06 17:42:47

Ponadto, jeśli przekazałeś poufne dane (np. plik zawierający hasła), powinieneś całkowicie usunąć je z historii repozytorium. Oto przewodnik wyjaśniający, jak to zrobić: http://help.github.com/remove-sensitive-data/

 65
Author: BoD,
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-08-21 12:16:36

Zgodnie z moją odpowiedzią tutaj: https://stackoverflow.com/questions/6313126/how-to-remove-a-directory-in-my-github-repository

Aby usunąć folder / katalog lub plik tylko z repozytorium git, a nie z lokalnego spróbuj wykonać 3 proste kroki.


Kroki usuwania katalogu

git rm -r --cached File-or-FolderName
git commit -m "Removed folder from repository"
git push origin master

Kroki, aby zignorować ten folder w następnym zatwierdzeniu

Aby zignorować ten folder z kolejnych commitów, należy utworzyć jeden plik w katalogu głównym o nazwie .gitignore i włóż do niego nazwę folderów. Możesz umieścić tyle, ile chcesz

.gitignore plik będzie wyglądał tak

/FolderName

Usuń katalog

 61
Author: eirenaios,
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
2017-09-04 04:55:24

Bardziej ogólne rozwiązanie:

  1. Edycja .gitignore pliku.

    ECHO mylogfile.log >> .gitignore

  2. Usuń wszystkie elementy z indeksu.

    git rm -r -f --cached .

  3. Rebuild index.

    git add .

  4. Utwórz nowy commit

    git commit -m "Removed mylogfile.log"

 55
Author: mAsT3RpEE,
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
2013-12-13 11:42:32

Git pozwala Ci ignorować te pliki zakładając, że są niezmienione. To odbywa się poprzez uruchomienie polecenia git update-index --assume-unchanged path/to/file.txt. Po oznaczeniu pliku jako takiego, git będzie całkowicie zignoruj wszelkie zmiany w tym pliku; nie pojawią się, gdy uruchamianie git status lub Git diff, ani też nigdy nie zostanie popełnione.

(od https://help.github.com/articles/ignoring-files )

Stąd nie usuwanie go, ale ignorowanie zmian w nim na zawsze. Myślę, że to działa tylko lokalnie, więc współpracownicy mogą nadal widzieć zmiany w nim, chyba że wykonają tę samą komendę, co powyżej. (Nadal trzeba to jednak zweryfikować.)

Uwaga: nie jest to odpowiedź bezpośrednio na pytanie, ale opiera się na dalszych pytań w komentarzach innych odpowiedzi.

 18
Author: Rystraum,
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
2014-01-28 11:46:49

Powyższe odpowiedzi mi nie odpowiadały. Używałem filter-branch, aby usunąć wszystkie zatwierdzone pliki

Usuń plik z repozytorium git za pomocą:

git filter-branch --tree-filter 'rm  file'

Usuń folder z repozytorium git za pomocą:

git filter-branch --tree-filter 'rm -rf directory'

Usuwa katalog lub plik ze wszystkich commitów

Możesz określić commit używając:

git filter-branch --tree-filter 'rm -rf directory' HEAD

Lub zakres

git filter-branch --tree-filter 'rm -rf vendor/gems' t49dse..HEAD

Aby wcisnąć wszystko do pilota, możesz zrobić:

git push origin master --force
 5
Author: Martijn Mellens,
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
2016-01-12 13:59:01

Jeśli chcesz po prostu odłączyć plik i nie usunąć go z lokalnego i zdalnego repo, użyj polecenia thhis:

git update-index --assume-unchanged  file_name_with_path
 4
Author: Afraz Ahmad,
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
2018-09-07 09:05:22