Hoe kan ik een bestand verwijderen van een git-repository?

Ik heb een bestand toegevoegd met de naam "file1.txt"aan een git-repository. Daarna heeft ik het gepleegd, een aantal mappen toegevoegd, de naam dir1en dir2, en nam ze toe aan de git-repository.

Nu de huidige repository "file1.txt", dir1, en dir2. Hoe kan ik "file1.txt"verwijderen zonder anderen te beïnvloeden, zoals dir1en dir2?


1, Autoriteit 100%

Gebruik git rm.

Als u het bestand van de GIT Repository en het bestandssysteem wilt verwijderen, gebruikt u:

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

Maar als u het bestand alleen van de GIT-repository wilt verwijderen en deze niet uit het bestandssysteem wilt verwijderen, gebruikt u:

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

en om wijzigingen in Remote Repo

te duwen

git push origin branch_name

2, Autoriteit 17%

git rm file.txtVerwijdert het bestand van de repo maar Verwijdert het ook uit het lokale bestandssysteem .

Om het bestand van de Repo en niet te verwijderen, verwijdert u het van het gebruik van het lokale bestandssysteem:
git rm --cached file.txt

De exacte situatie hieronder is waar ik git gebruik om versiebeheer voor de website van mijn bedrijf te behouden, maar de map “mickey” was een tmp-map om privé-inhoud te delen met een CAD-ontwikkelaar. Toen hij ENORME bestanden nodig had, maakte ik een privé, niet-gekoppelde map en ftpd de bestanden daar zodat hij ze via de browser kon ophalen. Toen ik vergat dat ik dit deed, voerde ik later een git add -Auit vanuit de basismap van de website. Vervolgens toonde git statusde nieuwe bestanden die gecommitteerd moesten worden. Nu moest ik ze verwijderen uit git’s tracking en versiebeheer…

De onderstaande voorbeelduitvoer is van wat me zojuist is overkomen, waarbij ik onbedoeld het bestand .003heb verwijderd. Gelukkig kan het me niet schelen wat er met de lokale kopie naar .003is gebeurd, maar sommige van de andere momenteel gewijzigde bestanden waren updates die ik zojuist op de website heb aangebracht en het zou geweldig zijn als ze op de lokaal bestandssysteem! “Lokaal bestandssysteem” = de live website (geen goede gewoonte, maar is realiteit).

[~/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: Dit antwoord krijgt wat verkeer, dus ik dacht dat ik mijn andere git antwoord deelt een paar geweldige bronnen: Deze pagina heeft een afbeelding Dat helpt Demystify Git voor mij te demisteren. De “pro git” boek is online en helpt me veel.


3, Autoriteit 2%

Eerst, als u git rm, gebruikt, Speciaal voor meerdere bestanden, overweeg dan een wildcard die wordt opgelost door de schaal, niet door de opdracht git.

git rm -- *.anExtension
git commit -m "remove multiple files"

Maar als uw bestand al op GitHub is, Delete het direct uit de Web Gui!

Bekijk eenvoudig elk bestand in uw repository, klik op het pictogram van de prullenbak aan de bovenkant en verbind de verwijdering net als elke andere webgebaseerde bewerking.

Dan “git pull” op uw lokale repo, en die het bestand ook lokaal verwijdert.
Wat maakt dit antwoord een (rotonde) manier om een ​​bestand van Git Repo te verwijderen?
(Om nog maar te zwijgen over dat een bestand op GitHub is in een “git repo”)


(De commit zal de verwijdering van dat bestand weerspiegelen):

En zo, is het weg.

Voor hulp bij deze functies, zorg er dan voor dat u onze helpartikelen op maken , verplaatsen , hernoemen , en verwijderen bestanden.

OPMERKING: Omdat het een versiesregelsysteem is, heeft Git altijd uw rug als u het bestand later moet herstellen.

De laatste zin betekent dat het verwijderde bestand nog steeds deel uitmaakt van de geschiedenis, en u kunt het gemakkelijk genoeg herstellen (maar nog niet via de Gitub-webinterface):

Zie “een verwijderde bestand herstellen in een git repo “.


4, Autoriteit 2%

Dit is de enige optie die voor mij werkte.

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

Opmerking: vervang * .SQL met uw bestandsnaam of bestandstype. Wees heel voorzichtig, want dit zal door elke commit gaan en dit bestandstype rukt.

EDIT:
let op – na dit commando kun je niet duwen of trekken – je ziet de afwijzing van ‘niet-gerelateerde geschiedenis’ je kunt ‘git push –force -u origin master’ gebruiken om te duwen of te trekken


Antwoord 5

Bovendien, als het een map is die moet worden verwijderd en de daaropvolgende onderliggende mappen of bestanden, gebruik dan:

git rm -r foldername

Antwoord 6

Meer in het algemeen zal git helphelpen met ten minste eenvoudige vragen zoals deze:

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

Antwoord 7

Als u het bestand uit de repo wilt verwijderen, maar het in het bestandssysteem wilt laten staan (wordt niet getraceerd):

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

Als u het bestand uit de repo en uit het bestandssysteem wilt verwijderen, zijn er twee opties:

  1. Als het bestand geen wijzigingen in de index heeft:

    bykov@gitserver:~/temp> git rm file1.txt
    bykov@gitserver:~/temp> git commit -m "remove file1.txt"
    
  2. Als het bestand wijzigingen in de index heeft:

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

Antwoord 8

git rmzal vanaf nu alleen het bestand op deze branch verwijderen, maar het blijft in de geschiedenis en git zal het onthouden.

De juiste manier om dit te doen is met git filter-branch, zoals anderen hier hebben vermeld. Het zal elke commit in de geschiedenis van de branch herschrijven om dat bestand te verwijderen.

Maar zelfs daarna kan git het onthouden omdat er verwijzingen naar kunnen zijn in reflog, remotes, tags en dergelijke.

Als je het in één stap volledig wilt wissen, raad ik je aan om git forget-blob

te gebruiken

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

Het is makkelijk, doe gewoon git forget-blob file1.txt.

Dit zal elke referentie verwijderen, git filter-branchdoen, en tenslotte de git garbage collector git gcuitvoeren om dit bestand in je repo volledig te verwijderen.


Antwoord 9

Opmerking: als je alleen bestanden van git wilt verwijderen, gebruik dan hieronder:

git rm --cached file1.txt

Als u ook van de harde schijf wilt verwijderen:

git rm file1.txt

Als u een map wilt verwijderen (de map bevat mogelijk weinig bestanden), moet u deze verwijderen met een recursief commando, zoals hieronder:

git rm -r foldername

Als u een map in een andere map wilt verwijderen

git rm -r parentFolder/childFolder

Vervolgens kun je zoals gewoonlijk commiten push. Als u echter de verwijderde map wilt herstellen, kunt u dit volgen: verwijderde bestanden herstellen van git is mogelijk.

Van document:

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

OPTIES

<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

het kan nodig zijn om ze te shell-ontsnappen. Een leidende directorynaam (bijv. dir to
verwijder dir/file1 en dir/file2) kunnen worden gegeven om alle bestanden in . te verwijderen
de directory, en recursief alle subdirectories, maar dit vereist:
de -r optie om expliciet te worden gegeven.
-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

opdrachtregelopties).
--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.

Lees meer in het officiële document.


Antwoord 10

Een andere manier als u het bestand uit uw lokale map wilt verwijderen met de opdracht rm en vervolgens de wijzigingen naar de externe server wilt pushen.

rm file1.txt
git commit -a -m "Deleting files"
git push origin master

Antwoord 11

In mijn geval probeerde ik het bestand op github te verwijderen na een paar commits maar op te slaan op de computer

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

en later werd dit bestand genegeerd


Antwoord 12

Een specifiek bestand verwijderen

git rm bestandsnaam

Om alle niet-getrackte bestanden recursief in één keer op te schonen uit een map

git clean -fdx


Antwoord 13

Als je de GitHub voor Windows-applicatie hebt, kun je een bestand in 5 eenvoudige stappen verwijderen:

  • Klik op Synchroniseren.
  • Klik op de map waar het bestand zich bevindt en selecteer uw laatste versie van het bestand.
  • Klik op tools en selecteer “Open hier een shell.”
  • Typ in de shell: “rm {filename}” en druk op enter.
  • Voeg de wijziging door en synchroniseer opnieuw.

Antwoord 14

Volgens de documentatie.

git rm --cached file1.txt

Als het om gevoelige gegevens gaat, kun je beter niet zeggen dat je het bestand hebt verwijderd, maar het gewoon in de laatst bekende vastlegging hebt opgenomen:

0. Laatste toezegging wijzigen

git commit --amend -CHEAD

Als u het bestand van alle GIT-geschiedenis wilt verwijderen, volgens de Documentatie u moet het volgende doen:

1. Verwijder het uit uw plaatselijke geschiedenis

git filter-branch --force --index-filter \ "git rm --cached --ignore-unmatch PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA" \  --prune-empty --tag-name-filter cat -- --all
# Replace PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA with the path to the file you want to remove, not just its filename
  1. Vergeet niet om dit bestand in te voegen in .gitignore (als het een bestand is dat u nooit wilt delen (zoals wachtwoorden …):
echo "YOUR-FILE-WITH-SENSITIVE-DATA" >> .gitignore
git add .gitignore
git commit -m "Add YOUR-FILE-WITH-SENSITIVE-DATA to .gitignore"

3. Als u moet verwijderen uit de afstandsbediening

git push origin --force --all

4. Als u het ook moet verwijderen van tag-releases:

git push origin --force --tags

15

  1. Verwijder eerst bestanden van lokale repository.

    Git RM -R-bestandsnaam

    of, verwijder de bestanden alleen van lokale repository, maar uit het bestandssysteem

    Git RM – Cached-bestandsnaam

  2. Ten tweede, begaan wijzigingen in lokale repository.

    git commit -m "unwanted files or some inline comments"   
    
  3. Ten slotte, update / duw lokale wijzigingen in de externe repository.

    git push 
    

16

Het antwoord van Greg Hewgill, dat is bewerkt door Johannchopinheeft me geholpen, omdat ik er niet om gaf het bestand volledig uit de geschiedenis te verwijderen.
In mijn geval was het een directory, dus de enige wijziging die ik deed was het gebruik van:

git rm -r --cached myDirectoryName

in plaats van “git rm –cached file1.txt”
..gevolgd door:

git commit -m "deleted myDirectoryName from git"
git push origin branch_name

Bedankt Greg Hewgillen Johannchopin!


Antwoord 17

ga naar je projectmap en typ:

git filter-branch --tree-filter 'rm -f <deleted-file>' HEAD

duw daarna –force for delete file van alle commits.

git push origin --force --all

Antwoord 18

Ik heb veel van de voorgestelde opties geprobeerd en geen enkele leek te werken (ik zal de verschillende problemen niet opsommen).
Wat ik uiteindelijk deed, wat werkte, was eenvoudig en intuïtief (voor mij) was:

  1. verplaats de hele lokale repo ergens anders
  2. kloon de repo opnieuw van master naar je lokale schijf
  3. kopieer de bestanden/map van je originele kopie in #1 terug naar de nieuwe kloon van #2
  4. zorg ervoor dat het grote probleembestand niet aanwezig is of uitgesloten is in het .gitignore-bestand
  5. doe de gebruikelijke git add/git commit/git push

Antwoord 19

Nadat u het bestand van de repo hebt verwijderd met git rmU kunt BFG Repo-Cleaner om het bestand volledig en gemakkelijk te vernietigen van de repo-geschiedenis.


20

Ik heb obj en bin-bestanden die het per ongeluk in de repo hebben gehaald die ik niet wil vervuilen van mijn ‘gewijzigde bestanden’ lijst

NA Ik merkte dat ze naar de afstandsbediening gingen, ik negeerde ze door dit toe te voegen aan .gitignore

/*/obj
/*/bin

Probleem is dat ze zich al in de afstandsbediening bevinden en wanneer ze worden gewijzigd, verschijnen ze, zoals gewijzigd en de gewijzigde bestandslijst worden gewijzigd.

Om te stoppen met het zien van deze, moet u de hele map uit de externe repository verwijderen.

In een opdrachtprompt:

  1. CD Naar de Repo-map (d.w.z. C:\repos\MyRepo)
  2. Ik wil SSIS \ OBJ verwijderen. Het lijkt erop dat u alleen op het hoogste niveau kunt verwijderen, dus u hebt nu naar een CD in SSIS: (d.w.z. C:\repos\MyRepo\SSIS)
  3. Typ nu de Magic Incantation git rm -r -f obj
    • rm = verwijderen
    • -R = Recursief verwijderen
    • -f = betekent kracht, want je bedoelt het echt
    • obj is de map
  4. Voer nu uit git commit -m "remove obj folder"

Ik kreeg een alarmerend bericht met de tekst 13-bestanden gewijzigd 315222-deleties

Dan, omdat ik de CMD-lijn niet wilde opzoeken, ging ik naar Visual Sstudio en deed een synchronisatie om het op de afstandsbediening toe te passen


21

Door gewoon in het bestand in uw GitHub-repository te gaan, ziet u het pictogram Verwijderen naast RAW | Beschuldigen en vergeet niet op de knop Wijzigingen in te klikken. En u kunt zien dat uw bestand is verwijderd.


22

Als u bestanden van een bepaalde extensie moet verwijderen (bijvoorbeeld gecompileerde bestanden), kunt u het volgende doen om ze allemaal tegelijk te verwijderen:

git remove -f *.pyc

Antwoord 23

Als je niet in je lokale repo maar in git repo opslaat, open dan gewoon het bestand in git repo via de webinterface en zoek de knop Verwijderen in de rechterhoek van de interface.
Klik hier om de interface te bekijken Optie verwijderen

Other episodes