Jak mogę usunąć plik z git repo?

Dodałem plik o nazwie "file1.txt" do git repo. Następnie dodałem kilka katalogów o nazwie dir1 i dir2 i przekazałem je do git repo.

Teraz obecny repo mA "file1.txt", dir1 i dir2.
Jak mogę usunąć "file1.txt" bez wpływu na inne, takie jak dir1 i dir2?

 1381
Author: CodeWizard, 2010-01-12

17 answers

Użycie git rm:

git rm file1.txt
git commit -m "remove file1.txt"

Ale jeśli chcesz usunąć plik tylko z repozytorium Git, a nie usunąć go z systemu plików, użyj:

git rm --cached file1.txt
git commit -m "remove file1.txt"

I wypychanie zmian do zdalnego repo

git push origin branch_name  
 2320
Author: Greg Hewgill,
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-10-27 09:30:41

git rm file.txt usuwa plik z repo, ale usuwa go również z lokalnego systemu plików .

Aby usunąć plik z repo i Nie usuń go z lokalnego systemu plików użyj:
git rm --cached file.txt

Poniżej znajduje się sytuacja, w której używam Gita do utrzymywania kontroli wersji dla mojej biznesowej strony internetowej, ale katalog "mickey" był folderem tmp, aby udostępniać prywatne treści programistom CAD. Kiedy potrzebował ogromnych plików, zrobiłem prywatny, niepowiązany katalog i ftpd pliki tam dla niego do pobrania przez przeglądarkę. Zapominając, że to zrobiłem, wykonałem później git add -A z katalogu podstawowego strony. Następnie git status pokazał nowe pliki wymagające zatwierdzenia. Teraz musiałem usunąć je ze śledzenia i kontroli wersji Gita...

Przykładowy wynik poniżej pochodzi z tego, co właśnie mi się przydarzyło, gdzie przypadkowo usunąłem plik .003. Na szczęście nie obchodzi mnie, co się stało z lokalną kopią .003, ale niektóre inne aktualnie zmienione pliki były aktualizacjami Właśnie się na stronie i byłoby epic, aby zostały usunięte w lokalnym systemie plików! "Lokalny system plików" = witryna NA ŻYWO (nie jest to wielka praktyka, ale jest rzeczywistością) .

[~/www]$ git rm shop/mickey/mtt_flange_SCN.7z.003
error: 'shop/mickey/mtt_flange_SCN.7z.003' has local modifications
(use --cached to keep the file, or -f to force removal)
[~/www]$ git rm -f shop/mickey/mtt_flange_SCN.7z.003
rm 'shop/mickey/mtt_flange_SCN.7z.003'
[~/www]$ 
[~/www]$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   deleted:    shop/mickey/mtt_flange_SCN.7z.003
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   shop/mickey/mtt_flange_SCN.7z.001
#   modified:   shop/mickey/mtt_flange_SCN.7z.002
[~/www]$ ls shop/mickey/mtt_flange_S*
shop/mickey/mtt_flange_SCN.7z.001  shop/mickey/mtt_flange_SCN.7z.002
[~/www]$ 
[~/www]$ 
[~/www]$ git rm --cached shop/mickey/mtt_flange_SCN.7z.002
rm 'shop/mickey/mtt_flange_SCN.7z.002'
[~/www]$ ls shop/mickey/mtt_flange_S*
shop/mickey/mtt_flange_SCN.7z.001  shop/mickey/mtt_flange_SCN.7z.002
[~/www]$ 
[~/www]$ 
[~/www]$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   deleted:    shop/mickey/mtt_flange_SCN.7z.002
#   deleted:    shop/mickey/mtt_flange_SCN.7z.003
#
# Changed but not updated:
#   modified:   shop/mickey/mtt_flange_SCN.7z.001
[~/www]$

Update: ta odpowiedź jest coraz trochę ruchu, więc pomyślałem, że wspomnę mój inne Git answer dzieli się kilkoma świetnymi zasobami: ta strona ma grafikę, która pomaga demystify Git dla mnie. Książka "Pro Git" jest online i bardzo mi pomaga.

 553
Author: Chris K,
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-05-23 12:02:49

Jeśli Twój plik jest już na Githubie, teraz (lipiec 2013) Możesz bezpośrednio usunąć go z interfejsu WWW!

Wystarczy wyświetlić dowolny plik w repozytorium, kliknąć ikonę kosza na górze i zatwierdzić usunięcie, tak jak każda inna edycja internetowa.

przycisk Usuń

(commit będzie odzwierciedlał usunięcie tego pliku):

Zatwierdź usunięcie

I tak po prostu zniknęło.

Aby uzyskać pomoc z tymi funkcjami, koniecznie przeczytaj naszą pomoc artykuły o tworzenie, przeprowadzki, zmiana nazwy i usuwanie plików .

Uwaga: ponieważ jest to system kontroli wersji, Git zawsze ma cię za plecami, jeśli chcesz odzyskać plik później.

Ostatnie zdanie oznacza, że usunięty plik nadal jest częścią historii i można go łatwo przywrócić (ale jeszcze nie za pomocą interfejsu WWW GitHub):

Zobacz " Restore a deleted file in a Git repo".

 60
Author: VonC,
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-05-23 11:47:32

To jedyna opcja, która mi pomogła.

git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch *.sql'

Uwaga: Zastąp *.sql z nazwą pliku lub typem pliku. Bądź bardzo ostrożny, ponieważ przejdzie to przez każdy commit i zgarnie ten typ pliku.

 42
Author: Jason Glisson,
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
2015-02-27 19:39:16

Dodatkowo, jeśli jest to folder do usunięcia i kolejne foldery podrzędne lub pliki, użyj:

git rm -r foldername
 26
Author: Raja,
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-04-28 13:12:31

Ogólnie rzecz biorąc, git help pomoże przynajmniej w prostych pytaniach takich jak:

zhasper@berens:/media/Kindle/documents$ git help
usage: git [--version] [--exec-path[=GIT_EXEC_PATH]] [--html-path] [-p|--paginate|--no-pager] [--bare] [--git-dir=GIT_DIR] [--work-tree=GIT_WORK_TREE] [--help] COMMAND [ARGS]

The most commonly used git commands are:
   add        Add file contents to the index
   :
   rm         Remove files from the working tree and from the index
 23
Author: James Polley,
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
2010-01-12 08:21:03

Jeśli chcesz usunąć plik z repo, ale pozostaw go w systemie plików (nie będzie śledzony):

bykov@gitserver:~/temp> git rm --cached file1.txt
bykov@gitserver:~/temp> git commit -m "remove file1.txt from the repo"

Jeśli chcesz usunąć plik z repo i z systemu plików, są dwie opcje:

  1. Jeśli plik nie ma zmian w indeksie:

    bykov@gitserver:~/temp> git rm file1.txt
    bykov@gitserver:~/temp> git commit -m "remove file1.txt"
    
  2. Jeśli plik ma zmiany w indeksie:

    bykov@gitserver:~/temp> git rm -f file1.txt
    bykov@gitserver:~/temp> git commit -m "remove file1.txt"
    
 12
Author: Aleksey Bykov,
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
2015-03-20 12:31:35

git rm od teraz usunie tylko Plik z tej gałęzi, ale pozostanie on w historii i git będzie go pamiętał.

Dobrym sposobem na to jest git filter-branch, Jak inni tu wspominali. Przepisze każdy commit w historii gałęzi, aby usunąć ten plik.

Ale nawet po zrobieniu tego, git może to zapamiętać, ponieważ mogą być do niego odniesienia w reflog, remotes, tagach i tym podobnych.

Jeśli chcesz całkowicie go zniszczyć w jednym kroku, zalecam użycie git forget-blob

Https://ownyourbits.com/2017/01/18/completely-remove-a-file-from-a-git-repository-with-git-forget-blob/

To proste, po prostu zrób git forget-blob file1.txt.

Spowoduje to usunięcie wszystkich referencji, wykonanie git filter-branch i na koniec uruchomienie git garbage collector git gc, aby całkowicie pozbyć się tego pliku w repo.

 11
Author: nachoparker,
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-01-23 12:56:04

Inny sposób, jeśli chcesz usunąć plik z folderu lokalnego za pomocą polecenia rm, a następnie przenieść zmiany na serwer zdalny.

rm file1.txt

git commit -a -m "Deleting files"

git push origin master
 8
Author: Suhaib,
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
2015-10-06 03:07:44

Aby usunąć określony plik

Git RM nazwa pliku

Aby wyczyścić wszystkie Nie śledzone pliki z katalogu rekurencyjnie w jednym ujęciu

Git clean-fdx

 6
Author: Sitesh,
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-08-23 13:56:08

Jeśli masz aplikację GitHub dla Windows, możesz usunąć plik w 5 prostych krokach:

  • Kliknij Synchronizuj.
  • Kliknij katalog, w którym znajduje się plik i wybierz swoją najnowszą wersję pliku.
  • Kliknij na Narzędzia i wybierz " Otwórz powłokę tutaj."
  • w powłoce wpisz: "rm {filename}" i naciśnij enter.
  • Zatwierdź zmianę i zsynchronizuj.
 5
Author: jushusted,
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-03-15 18:52:55

W moim przypadku próbowałem usunąć plik na GitHubie po kilku commitach ale zapisałem na komputerze

git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch file_name_with_path' HEAD
git push --force -u origin master

I później ten plik został zignorowany

 5
Author: OlegV,
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-08-23 12:03:21
  1. Najpierw usuń pliki z lokalnego repozytorium.

    Git RM-R nazwa pliku

    Lub usuń pliki tylko z lokalnego repozytorium, ale z systemu plików

    Git RM --cached File-Name

  2. Po Drugie, zatwierdź zmiany do lokalnego repozytorium.

    git commit -m "unwanted files or some inline comments"   
    
  3. Na koniec zaktualizuj / wypchnij lokalne zmiany do zdalnego repozytorium.

    git push 
    
 2
Author: Ajay,
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-10-18 04:00:50

Wypróbowałem wiele sugerowanych opcji i żadna nie zadziałała (nie wymienię różnych problemów). To, co zrobiłem, co działało, było proste i intuicyjne (dla mnie) to:

  1. Przenieś cały lokalny repo gdzie indziej
  2. Sklonuj repo ponownie z master na lokalny dysk
  3. Skopiuj pliki / folder z oryginalnej kopii w #1 z powrotem do nowego klona z #2
  4. Upewnij się, że problem duży plik nie jest tam lub wykluczone w .gitignore plik
  5. Wykonaj zwykły git add/git commit / git push
 2
Author: jacanterbury,
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-21 18:22:23

Mam pliki obj i bin, które przypadkowo trafiły do repo, że nie chcę zanieczyszczać listy "zmienionych plików"

po zauważyłem, że poszli do pilota, zignorowałem je dodając to do .gitignore

/*/obj
/*/bin

Problem polega na tym, że są już w zdalnym, a gdy zostaną zmienione, wyskakują jako zmienione i zanieczyszczają zmienioną listę plików.

Aby przestać je widzieć, musisz usunąć cały folder ze zdalnego repozytorium.

W poleceniu prompt:

  1. CD do folderu repo (tzn. C:\repos\MyRepo)
  2. chcę usunąć SSIS \ obj. Wydaje się, że można usunąć tylko na najwyższym poziomie, więc teraz musisz CD do SSIS: (tj. C:\repos\MyRepo\SSIS)
  3. Teraz wpisz magiczne zaklęcie git rm -r -f obj
    • rm = Usuń
    • - r = rekurencyjnie Usuń
    • -f = oznacza siłę, bo naprawdę to masz na myśli
    • obj to folder
  4. teraz biegnij git commit -m "remove obj folder"

Dostałem alarmującą wiadomość mówiącą 13 plików zmieniono 315222 delecje

W związku z tym, że nie chciałem szukać linii CMD, wszedłem do Visual Sstudio i wykonałem synchronizację, aby zastosować ją do pilota
 0
Author: Nick.McDermaid,
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-07-28 10:07:25

Po usunięciu pliku z repo za pomocą git rmmożesz użyć BFG Repo-Cleaner, aby całkowicie i łatwo usunąć plik z historii repo.

 0
Author: glisu,
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-30 17:26:37

Incase jeśli nie plik w lokalnym repo, ale w git repo, po prostu otwórz plik w git repo poprzez interfejs webowy i znajdź przycisk Delete w prawym rogu interfejsu. Kliknij tutaj, aby wyświetlić opcję Usuń Interfejs

 -6
Author: Poseidon,
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-11-30 15:47:09