Frage Wie kann ich eine Datei aus Git Repo löschen?


Ich habe eine Datei mit dem Namen hinzugefügt "file1.txt" um Repo zu git. Danach habe ich es begangen, ein paar Verzeichnisse genannt dir1 und dir2, und verpflichtete sie zu git repo.

Jetzt hat das aktuelle Repo "file1.txt", dir1 und dir2.
Wie kann ich löschen? "file1.txt" ohne andere zu beeinflussen wie dir1 und dir2?


1311
2018-01-12 07:48


Ursprung


Antworten:


Benutzen git rm:

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

Wenn Sie die Datei jedoch nur aus dem Git-Repository entfernen und nicht aus dem Dateisystem entfernen möchten, verwenden Sie Folgendes:

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

Und um Änderungen auf Remote Repo zu schieben

git push origin branch_name  

2213
2018-01-12 07:52



git rm file.txt entfernt die Datei aus dem Repo aber löscht es auch aus dem lokalen Dateisystem.

Um die Datei aus dem Repo zu entfernen und nicht Löschen Sie es aus dem lokalen Dateisystem verwenden:
git rm --cached file.txt 

In der folgenden genauen Situation verwende ich git, um die Versionskontrolle für die Website meines Unternehmens beizubehalten, aber das "mickey" -Verzeichnis war ein tmp-Ordner, um privaten Inhalt mit einem CAD-Entwickler zu teilen. Wenn er riesige Dateien brauchte, machte ich ein privates, nicht verlinktes Verzeichnis und ftpd die Dateien dort für ihn über den Browser abzurufen. Ich habe vergessen, dass ich das gemacht habe git add -A aus dem Basisverzeichnis der Website. Anschließend, git status zeigte die neuen Dateien, die festgeschrieben werden mussten. Jetzt musste ich sie aus git's Tracking und Versionskontrolle löschen ...

Die Beispielausgabe unten ist von dem, was gerade mit mir passiert ist, wo ich unabsichtlich gelöscht habe .003 Datei. Zum Glück ist mir egal, was mit der lokalen Kopie passiert ist .003, aber einige der anderen derzeit geänderten Dateien waren Updates, die ich gerade auf der Website gemacht habe und episch wäre, auf dem lokalen Dateisystem gelöscht worden zu sein! "Lokales Dateisystem" = die Live-Website (keine großartige Übung, aber ist Realität).

[~/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]$

Aktualisieren: Diese Antwort bekommt etwas Verkehr, also dachte ich, ich würde meine erwähnen andere Git Antwort teilt ein paar großartige Ressourcen: Diese Seite hat eine Grafik, die Git für mich entmystifizieren hilft. Das "Pro Git" Buch ist online und hilft mir sehr.


547
2018-05-25 20:26



Wenn Ihre Datei bereits auf GitHub ist, Sie können jetzt (Juli 2013) Löschen Sie es direkt aus der Web-GUI!

Zeigen Sie einfach eine Datei in Ihrem Repository an, klicken Sie oben auf das Mülleimersymbol und übernehmen Sie das Entfernen wie bei jeder anderen webbasierten Bearbeitung.

delete button

(Das Commit spiegelt die Löschung dieser Datei wider):

commit a deletion

Und genau so ist es weg.

Wenn Sie Hilfe zu diesen Funktionen benötigen, lesen Sie unbedingt unsere Hilfeartikel auf Erstellen, ziehen um, Umbenennung, und löschen Dateien.

Hinweis: Da es sich um ein Versionskontrollsystem handelt, hat Git immer den Rücken frei, wenn Sie die Datei später wiederherstellen müssen.

Der letzte Satz bedeutet, dass die gelöschte Datei immer noch einen Teil der Geschichte ist, und man kann es leicht genug wiederherstellen (aber noch nicht durch das GitHub Web-Interface):

Sehen "Stellen Sie eine gelöschte Datei in einem Git Repo wieder her".


56
2017-07-04 20:53



Dies ist die einzige Option, die für mich funktioniert hat.

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

Hinweis: Ersetzen Sie * .sql durch Ihren Dateinamen oder Dateityp. Sei sehr vorsichtig, denn dies wird jeden Commit durchlaufen und diesen Dateityp rippen.


39
2018-02-27 19:29



Allgemeiner, git help hilft bei mindestens einfachen Fragen wie folgt:

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
2018-01-12 08:21



Wenn es sich um einen zu entfernenden Ordner und um nachfolgende untergeordnete Ordner oder Dateien handelt, verwenden Sie außerdem Folgendes:

git rm -r foldername

23
2018-04-17 15:41



Wenn Sie die Datei aus dem Repo löschen möchten, diese jedoch im Dateisystem belassen (wird nicht verfolgt):

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

Wenn Sie die Datei aus dem Repo und aus dem Dateisystem löschen möchten, gibt es zwei Möglichkeiten:

  1. Wenn die Datei keine Änderungen im Index enthält:

    bykov@gitserver:~/temp> git rm file1.txt
    bykov@gitserver:~/temp> git commit -m "remove file1.txt"
    
  2. Wenn die Datei Änderungen im Index enthält:

    bykov@gitserver:~/temp> git rm -f file1.txt
    bykov@gitserver:~/temp> git commit -m "remove file1.txt"
    

10
2018-03-20 12:13



git rm Entferne nur die Datei in diesem Zweig von jetzt an, aber sie bleibt im Verlauf und git wird sich daran erinnern.

Der richtige Weg ist es mit git filter-branch, wie andere hier erwähnt haben. Es überschreibt jedes Commit im Verlauf der Verzweigung, um diese Datei zu löschen.

Aber auch danach kann sich git daran erinnern, weil es Referenzen in Reflogs, Remotes, Tags und dergleichen geben kann.

Wenn Sie es vollständig in einem Schritt ausradieren möchten, empfehle ich Ihnen zu verwenden git forget-blob

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

Es ist einfach, mach es einfach git forget-blob file1.txt.

Dies wird jede Referenz entfernen, tun git filter-branchund schließlich den git garbage collector ausführen git gc um diese Datei in Ihrem Repo vollständig loszuwerden.


10
2018-01-23 12:56



Eine andere Möglichkeit, wenn Sie die Datei mit dem Befehl rm aus Ihrem lokalen Ordner löschen und dann die Änderungen an den Remote-Server übertragen möchten.

rm file1.txt

git commit -a -m "Deleting files"

git push origin master

7
2017-10-06 03:07