Frage Entfernen Sie eine Datei aus einem Git-Repository, ohne sie aus dem lokalen Dateisystem zu löschen


Mein Initial Commit enthielt einige Protokolldateien. Ich habe hinzugefügt *log zu meinem .gitignoreund jetzt möchte ich die Protokolldateien aus meinem Repository entfernen.

git rm mylogfile.log

Entfernt eine Datei aus dem Repository, entfernt sie aber auch aus dem lokalen Dateisystem.

Wie kann ich diese Datei aus dem Repo entfernen? ohne Löschen meiner lokalen Kopie der Datei?


2435
2017-07-17 14:56


Ursprung


Antworten:


Für einzelne Datei:

git rm --cached mylogfile.log

Für einzelnes Verzeichnis:

git rm --cached -r mydirectory

3499
2017-07-17 14:57



Um einen ganzen Ordner aus dem Repo (wie Resharper-Dateien) zu entfernen, tun Sie dies:

git rm -r --cached folderName

Ich hatte einige Nachschärfendateien festgelegt und wollte nicht, dass diese für andere Projektbenutzer bestehen bleiben.


249
2018-04-04 18:14



Sie können Dateien auch basierend auf Ihrem .gitignore aus dem Repository entfernen, ohne sie aus dem lokalen Dateisystem zu löschen:

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

Oder alternativ auf Windows Powershell:

git rm --cached $(git ls-files -i -X .gitignore)

162
2018-01-31 10:05



Wenn Sie sensible Daten übermittelt haben (z. B. eine Datei mit Kennwörtern), sollten Sie sie vollständig aus dem Verlauf des Repositorys löschen. Hier ist ein Leitfaden, der erklärt, wie man das macht: http://help.github.com/remove-sensitive-data/


66
2017-08-21 12:16



Laut meiner Antwort hier: https://stackoverflow.com/questions/6313126/how-to-remove-a-directory-in-my-github-repository

Um einen Ordner / ein Verzeichnis oder eine Datei nur aus dem git-Repository und nicht aus dem lokalen Verzeichnis zu entfernen, versuchen Sie 3 einfache Schritte.


Schritte zum Entfernen des Verzeichnisses

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

Schritte, um diesen Ordner bei den nächsten Commits zu ignorieren

Um diesen Ordner bei den nächsten Commits zu ignorieren, wird eine Datei im Root-Verzeichnis erstellt .gitignore   und lege den Namen des Ordners hinein. Sie können so viele setzen wie Sie möchten

.gitignore Datei wird so aussehen

/FolderName

remove directory


58
2017-08-24 12:16



Eine allgemeinere Lösung:

  1. Bearbeiten .gitignore Datei.

    ECHO mylogfile.log >> .gitignore

  2. Entferne alle Gegenstände aus dem Index.

    git rm -r -f --cached .

  3. Index neu erstellen

    git add .

  4. Mach ein neues Commit

    git commit -m "Removed mylogfile.log"


54
2017-12-13 11:42



Mit Git können Sie diese Dateien ignorieren, indem Sie annehmen, dass sie unverändert sind. Dies   ist getan, indem Sie die git update-index --assume-unchanged path/to/file.txt Befehl. Sobald eine Datei als solche markiert ist, wird Git dies tun   ignoriere jegliche Änderungen an dieser Datei vollständig; sie werden nicht wann erscheinen   running git status oder git diff, noch werden sie jemals begangen werden.

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

Also nicht löschen, sondern Änderungen für immer ignorieren. Ich denke, das funktioniert nur lokal, also können Mitarbeiter Änderungen sehen, wenn sie nicht den gleichen Befehl wie oben ausführen. (Trotzdem muss dies überprüft werden.)

Hinweis: Dies beantwortet die Frage nicht direkt, sondern basiert auf Folgefragen in den Kommentaren der anderen Antworten.


17
2018-01-28 11:46



Die obigen Antworten funktionierten nicht für mich. Ich habe Filter-Zweig verwendet, um alle festgeschriebenen Dateien zu entfernen

entferne eine Datei aus einem Git-Repository mit:

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

entferne einen Ordner aus einem Git-Repository mit:

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

Dies entfernt das Verzeichnis oder die Datei von allen Commits

Sie können einen Commit angeben, indem Sie Folgendes verwenden:

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

Oder eine Reihe

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

Um alles auf die Fernbedienung zu schieben, können Sie Folgendes tun:

git push origin master --force

4
2018-01-12 13:59