it-swarm.com.de

Wie kann ich eine Datei aus git repo löschen?

Ich habe eine Datei namens "file1.txt" zu git repo hinzugefügt. Danach habe ich es festgeschrieben, ein paar Verzeichnisse mit den Namen dir1 und dir2 hinzugefügt und sie für git repo festgelegt. 

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

1537
webminal.org

Verwenden Sie git rm :

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

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

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

Und Push-Änderungen an Remote-Repo

git Push Origin branch_name  
2587
Greg Hewgill

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

Um die Datei aus dem Repo zu entfernen und not aus dem lokalen Dateisystem zu löschen, verwenden Sie:
git rm --cached file.txt 

In der folgenden Situation verwende ich git, um die Versionskontrolle für die Website meines Unternehmens aufrechtzuerhalten. Das Verzeichnis "mickey" war jedoch ein tmp-Ordner, um private Inhalte mit einem CAD - Entwickler zu teilen. Als er RIESIGE Dateien benötigte, erstellte ich ein privates, nicht verlinktes Verzeichnis und die dort befindlichen Dateien (ftpd), die er über den Browser abrufen konnte. Ich vergaß, dass ich dies tat, und führte später einen git add -A aus dem Basisverzeichnis der Website aus. Anschließend zeigte git status die neuen Dateien, für die ein Commit erforderlich ist. Jetzt musste ich sie aus gits Tracking und Versionskontrolle löschen ...

Die folgende Beispielausgabe stammt von dem, was mir gerade passiert ist, wo ich die .003-Datei ungewollt gelöscht habe. Zum Glück ist es mir egal, was mit der lokalen Kopie nach .003 passiert ist, aber bei den anderen derzeit geänderten Dateien handelt es sich um Updates, die ich gerade auf der Website vorgenommen habe, und wären auf dem lokalen Dateisystem episch gelöscht worden! "Lokales Dateisystem" = die Live-Website (keine großartige Praxis, aber 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]$

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

567
Chris K

Wenn sich Ihre Datei bereits auf GitHub befindet, kann Sie können jetzt (Juli 2013) direkt von der Web-GUI löschen!

Sehen Sie sich einfach eine beliebige Datei in Ihrem Repository an, klicken Sie oben auf das Papierkorbzeichen, und bestätigen Sie die Entfernung wie bei jeder anderen webbasierten Bearbeitung.

delete button

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

commit a deletion

Und einfach so ist es weg.

Weitere Informationen zu diesen Funktionen finden Sie in den Hilfeartikeln zu Erstellen , Verschieben , Umbenennen und Löschen Dateien.

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

Der letzte Satz bedeutet, dass die gelöschte Datei immer noch Teil des Verlaufs ist, und Sie können sie leicht genug wiederherstellen (jedoch noch nicht über die GitHub-Weboberfläche): 

Siehe " Wiederherstellen einer gelöschten Datei in einem Git-Repo ".

63
VonC

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. Seien Sie vorsichtig, da dies jedes Commit durchläuft und diesen Dateityp ausreißt. 

BEARBEITEN: Aufgepasst - nach diesem Befehl können Sie nicht mehr drücken oder ziehen - Sie werden die Ablehnung des 'unbezogenen Verlaufs' sehen

47
Jason Glisson

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

git rm -r foldername
32
Raja

Im Allgemeinen hilft git help bei zumindest einfachen Fragen wie dieser:

[email protected]:/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
James Polley

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

[email protected]:~/temp> git rm --cached file1.txt
[email protected]:~/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 für die Datei keine Änderungen im Index vorhanden sind: 

    [email protected]:~/temp> git rm file1.txt
    [email protected]:~/temp> git commit -m "remove file1.txt"
    
  2. Wenn die Datei Änderungen im Index aufweist: 

    [email protected]:~/temp> git rm -f file1.txt
    [email protected]:~/temp> git commit -m "remove file1.txt"
    
15
Aleksey Bykov

git rm entfernt nur die Datei in diesem Zweig von nun an, aber sie bleibt in der Historie und wird von git gespeichert.

Der richtige Weg dazu ist git filter-branch, wie andere hier erwähnt haben. Jedes Commit in der Historie des Zweigs wird neu geschrieben, um diese Datei zu löschen.

Aber selbst danach kann sich git daran erinnern, weil es in reflog, Fernbedienungen, Tags und dergleichen Verweise darauf geben kann.

Wenn Sie es in einem Schritt vollständig auslöschen möchten, empfehle ich die Verwendung von git forget-blob.

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

Es ist einfach, tun Sie einfach git forget-blob file1.txt.

Dadurch werden alle Verweise entfernt, git filter-branch ausgeführt und schließlich der git garbage collector git gc ausgeführt, um diese Datei in Ihrem Repo vollständig zu entfernen.

12
nachoparker

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

rm file1.txt

git commit -a -m "Deleting files"

git Push Origin master
9
Suhaib

Eine bestimmte Datei löschen

git rm Dateiname

Um alle nicht protokollierten Dateien aus einem Verzeichnis rekursiv in Einzelbild zu entfernen

git clean -fdx

7
Sitesh

Wenn Sie über die Anwendung GitHub für Windows verfügen, können Sie eine Datei in 5 einfachen Schritten löschen:

  • Klicken Sie auf Synchronisieren.
  • Klicken Sie auf das Verzeichnis, in dem sich die Datei befindet, und wählen Sie Ihre neueste Version der Datei aus.
  • Klicken Sie auf Tools und wählen Sie "Shell hier öffnen".
  • Geben Sie in der Shell Folgendes ein: "rm {Dateiname}" und drücken Sie die Eingabetaste.
  • Übernehmen Sie die Änderung und resync.
5
jushusted

In meinem Fall habe ich versucht, die Datei auf github nach einigen Commits zu entfernen, aber auf dem Computer zu speichern

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

und später wurde diese Datei ignoriert

5
OlegV

Hinweis: Wenn Sie eine Datei nur aus git löschen möchten, verwenden Sie unten:

git rm --cached file1.txt

Wenn Sie auch von der Festplatte löschen wollen:

git rm file1.txt

Wenn Sie einen Ordner entfernen möchten (der Ordner kann einige Dateien enthalten), sollten Sie ihn mit dem rekursiven Befehl wie folgt entfernen:

git rm -r foldername

Wenn Sie einen Ordner aus einem anderen Ordner entfernen möchten

git rm -r parentFolder/childFolder

Dann können Sie wie gewohnt commit und Push verwenden. Wenn Sie jedoch einen gelöschten Ordner wiederherstellen möchten, können Sie folgende Schritte ausführen: Gelöschte Dateien von git wiederherstellen.

Von doc:

git rm [-f | --force] [-n] [-r] [--cached] [--ignore-unmatch] [--quiet] [--] <file>…​

OPTIONEN

<file>…​

Files to remove. Fileglobs (e.g. *.c) can be given to remove all matching files. If you want Git to expand file glob characters, you

möglicherweise müssen sie mit der Shell entkommen. Ein führender Verzeichnisname (z. B. dir nach Remove dir/file1 und dir/file2) kann angegeben werden, um alle Dateien in .__ zu entfernen. das Verzeichnis und rekursiv alle Unterverzeichnisse, dies erfordert jedoch Die Option -r muss explizit angegeben werden . -f--force

Override the up-to-date check.

-n--dry-run

Don’t actually remove any file(s). Instead, just show if they exist in the index and would otherwise be removed by the command.

-r

Allow recursive removal when a leading directory name is given.

-- 

This option can be used to separate command-line options from the list of files, (useful when filenames might be mistaken for

befehlszeilenoptionen) . --cached

Use this option to unstage and remove paths only from the index. Working tree files, whether modified or not, will be left alone.

--ignore-unmatch

Exit with a zero status even if no files matched.

-q--quiet

git rm normally outputs one line (in the form of an rm command) for each file removed. This option suppresses that output.

Lesen Sie mehr im offiziellen Dokument.

3
Blasanka
  1. Entfernen Sie zunächst Dateien aus dem lokalen Repository.

    git rm -r Dateiname

    oder entfernen Sie Dateien nur aus dem lokalen Repository, aber aus dem Dateisystem

    git rm --cached Dateiname

  2. Zweitens: Commit-Änderungen in lokales Repository.

    git commit -m "unwanted files or some inline comments"   
    
  3. Aktualisieren Sie schließlich lokale Änderungen in das Remote-Repository.

    git Push 
    
3
Ajay

Ich habe viele der vorgeschlagenen Optionen ausprobiert und es schien keine zu funktionieren (ich liste die verschiedenen Probleme nicht auf). .__ Was ich am Ende tat, was funktionierte, war für mich einfach und intuitiv:

  1. verschieben Sie das gesamte lokale Repo an einen anderen Ort
  2. klonen Sie das Repo erneut vom Master auf Ihr lokales Laufwerk
  3. kopiere die Dateien/Ordner von deiner ursprünglichen Kopie in # 1 zurück in den neuen Klon von # 2
  4. stellen Sie sicher, dass die problematische große Datei nicht vorhanden ist oder in der .gitignore-Datei ausgeschlossen ist
  5. mache das übliche git add/git commit/git Push
2
jacanterbury

Nachdem Sie die Datei mit git rm aus dem Repo entfernt haben, können Sie BFG Repo-Cleaner verwenden, um die Datei vollständig und problemlos aus dem Repo-Verlauf zu löschen.

0
glisu

Ich habe obj- und bin-Dateien, die versehentlich das Repo erstellt haben, dass ich meine Liste der geänderten Dateien nicht verschmutzen möchte

Nachdem ich bemerkte, dass sie zur Fernbedienung gingen, ignorierte ich sie, indem sie dies zu .gitignore hinzufügte.

/*/obj
/*/bin

Das Problem ist, dass sie sich bereits in der Fernbedienung befinden. Wenn sie geändert werden, werden sie als geändert angezeigt und die geänderte Dateiliste wird verschmutzt. 

Um sie nicht mehr zu sehen, müssen Sie den gesamten Ordner aus dem Remote-Repository löschen.

In einer Eingabeaufforderung:

  1. CD in den Repo-Ordner (d. H. C:\repos\MyRepo)
  2. Ich möchte SSIS\obj löschen. Es scheint, dass Sie nur auf der obersten Ebene löschen können, sodass Sie jetzt eine CD in SSIS erstellen müssen (d. H. C:\repos\MyRepo\SSIS). 
  3. Geben Sie nun die Zauberbeschwörung git rm -r -f obj.__ ein.
    • rm = entfernen
    • -r = rekursiv entfernen
    • -f = bedeutet Kraft, denn du meinst es wirklich so
    • obj ist der Ordner
  4. Jetzt git commit -m "remove obj folder" ausführen

Ich habe eine alarmierende Meldung erhalten, dass 13 Dateien geändert wurden 315222 Löschungen

Da ich die CMD-Leitung nicht nachschlagen wollte, ging ich zu Visual Sstudio und machte eine Synchronisierung, um sie auf die Fernbedienung anzuwenden

0
Nick.McDermaid