Vraag Verwijder een bestand uit een Git-repository zonder het te verwijderen van het lokale bestandssysteem


Mijn eerste commit bevatte enkele logbestanden. Ik heb toegevoegd *log aan mijn .gitignore, en nu wil ik de logbestanden uit mijn repository verwijderen.

git rm mylogfile.log

zal een bestand uit de repository verwijderen, maar zal het ook van het lokale bestandssysteem verwijderen.

Hoe kan ik dit bestand uit de repo verwijderen zonder mijn lokale kopie van het bestand verwijderen?


2435
2017-07-17 14:56


oorsprong


antwoorden:


Voor één bestand:

git rm --cached mylogfile.log

Voor enkele directory:

git rm --cached -r mydirectory

3499
2017-07-17 14:57



Ga als volgt te werk om een ​​volledige map uit de repo te verwijderen (zoals Resharper-bestanden):

git rm -r --cached folderName

Ik had een aantal resarper-bestanden vastgelegd en wilde niet dat deze zouden blijven bestaan ​​voor andere projectgebruikers.


249
2018-04-04 18:14



U kunt ook bestanden uit de repository verwijderen op basis van uw .gitignore zonder ze uit het lokale bestandssysteem te verwijderen:

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

Of, als alternatief, op Windows Powershell:

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

162
2018-01-31 10:05



Als u gevoelige gegevens hebt vastgelegd (bijvoorbeeld een bestand met wachtwoorden), moet u dit ook volledig uit de geschiedenis van de gegevensopslagruimte verwijderen. Hier is een gids die uitlegt hoe je dat moet doen: http://help.github.com/remove-sensitive-data/


66
2017-08-21 12:16



Vanaf mijn Antwoord hier: https://stackoverflow.com/questions/6313126/how-to-remove-a-directory-in-my-github-repository

Om map / map of bestand alleen uit git repository te verwijderen en niet uit de lokale try 3 eenvoudige stappen.


Stappen om de map te verwijderen

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

Stappen om die map in volgende commits te negeren

Als je die map wilt negeren van de volgende commits, maak je een bestand met de naam root .gitignore   en plaats die mappennaam erin. Je kunt zoveel als je wilt

.gitignore bestand zal er zo uitzien

/FolderName

remove directory


58
2017-08-24 12:16



Een meer generieke oplossing:

  1. Bewerk .gitignore het dossier.

    ECHO mylogfile.log >> .gitignore

  2. Verwijder alle items uit de index.

    git rm -r -f --cached .

  3. Index opnieuw opbouwen.

    git add .

  4. Maak nieuwe commit

    git commit -m "Removed mylogfile.log"


54
2017-12-13 11:42



Git laat je die bestanden negeren door aan te nemen dat ze ongewijzigd zijn. Deze   wordt gedaan door het git update-index --assume-unchanged path/to/file.txt opdracht. Als je een bestand als zodanig markeert, zal git dat doen   negeer alle wijzigingen in dat bestand volledig; ze verschijnen niet wanneer   running git status of git diff, en ze zullen nooit worden gepleegd.

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

Vandaar dat het niet wordt verwijderd, maar wijzigingen voor altijd worden genegeerd. Ik denk dat dit alleen lokaal werkt, dus collega's kunnen nog steeds wijzigingen zien, tenzij ze dezelfde opdracht uitvoeren als hierboven. (Toch moet dit nog worden geverifieerd.)

Opmerking: dit beantwoordt de vraag niet direct, maar is gebaseerd op vervolgvragen in de opmerkingen van de andere antwoorden.


17
2018-01-28 11:46



Bovenstaande antwoorden werkten niet voor mij. Ik gebruikte filter-branch om alle toegewijde bestanden te verwijderen

verwijder een bestand uit een git repository met:

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

verwijder een map uit een git repository met:

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

Hiermee verwijdert u de map of het bestand van alle commits

je kunt een commit specificeren door gebruik te maken van:

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

Of een bereik

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

Als u alles naar de afstandsbediening wilt duwen, kunt u het volgende doen:

git push origin master --force

4
2018-01-12 13:59