Close

Git rm

Een veelgestelde vraag van mensen die aan de slag ga met Git is: 'Hoe kan ik ervoor zorgen dat Git een bestand (of bestanden) niet meer traceert?' De opdracht git rm wordt gebruikt om bestanden te verwijderen uit een Git-repository. Deze kan gezien worden als het omgekeerde van de opdracht git add.


Overzicht van git rm


De opdracht git rm kan gebruikt worden om afzonderlijke bestanden of een verzameling bestanden te verwijderen. De belangrijkste functie van git rm is het verwijderen van bijgehouden bestanden uit de Git-index. Daarnaast kan git rm gebruikt worden om bestanden te verwijderen uit zowel de staging-index als de werkmap. Er is geen optie om een bestand alleen uit de werkmap te verwijderen. De bestanden die beheerd worden moeten identiek zijn aan de bestanden in de huidige HEAD. Als er een afwijking is tussen de HEAD-versie van een bestand en de staging-index of de werkstructuurversie, blokkeert Git de verwijdering. Deze blokkade is een veiligheidsmechanisme om te voorkomen dat lopende wijzigingen worden verwijderd.

Let op dat git rm geen branches verwijdert. Meer informatie over het gebruik van git branches.

Gebruik


<file>…​

Specificeert de doelbestanden die verwijderd moeten worden. De optiewaarde kan een individueel bestand zijn, een lijst van bestanden gescheiden door spaties file1 file2 file3, of een bestandsglob met wildcard (~./directory/*).

-f
--force

De optie -f wordt gebruikt om de veiligheidscontrole te overschrijven die Git uitvoert om te garanderen dat de bestanden in HEAD overeenkomen met de huidige inhoud in de staging-index en de werkmap.

Git-logo
gerelateerd materiaal

Git cheat sheet

Logo Bitbucket
Oplossing bekijken

Git leren met Bitbucket Cloud

-n
--dry-run

De optie 'dry run' is een beveiliging die de opdracht git rm uitvoert, maar niet daadwerkelijk de bestanden verwijdert. In plaats daarvan wordt weergegeven welke bestanden de opdracht zou hebben verwijderd.

-r

De optie -r is een afkorting voor 'recursief'. Bij gebruik in recursieve modus verwijdert git rm de doelmap en de volledige inhoud van die map.

--

De scheidingsoptie wordt gebruikt om een expliciet onderscheid te maken tussen een lijst van bestandsnamen en de argumenten die worden doorgegeven aan git rm. Dit is nuttig als een van de bestandsnamen een syntaxis heeft die mogelijk wordt aangezien is voor andere opties.

--cached

De optie in de cache geeft aan dat de verwijdering alleen mag plaatsvinden tijdens de staging-index. De bestanden in de werkmap worden met rust gelaten.

--ignore-unmatch

Dit zorgt ervoor dat de opdracht wordt afgesloten met de sigterm-status 0, zelfs als er geen overeenkomende bestanden zijn. Dit is een statuscode op Unix-niveau. De code 0 geeft aan dat het aanroepen van de opdracht is gelukt. De optie --ignore-unmatch kan nuttig zijn als je git rm gebruikt als onderdeel van een groter shellscript dat met storingen moet kunnen omgaan.

-q
--quiet

De stille optie verbergt de uitvoer van de opdracht git rm. De opdracht geeft normaal gesproken één regel weer voor elk verwijderd bestand.

git rm ongedaan maken


Het uitvoeren van git rm is geen permanente update. De opdracht zal de staging-index en de werkmap bijwerken. Deze wijzigingen worden niet voortgezet totdat een nieuwe commit is aangemaakt en de wijzigingen zijn toegevoegd aan de commit-geschiedenis. Dit betekent dat de wijzigingen hier 'ongedaan kunnen worden gemaakt' met gewone Git-opdrachten.

git reset HEAD

Een reset zal de huidige staging-index en werkmap terugzetten naar de commit HEAD. Hiermee wordt een git rm ongedaan gemaakt.

git checkout .

Een checkout heeft hetzelfde resultaat en herstelt de recentste versie van een bestand via HEAD.

In het geval dat git rm werd uitgevoerd en een nieuwe commit werd aangemaakt die de verwijdering doorzet, kan git reflog gebruikt worden om een referentienummer te vinden vóór de uitvoering van git rm. Meer informatie over het gebruik van git reflog.

Bespreking


Het -argument dat aan de opdracht wordt gegeven, kan bestaan uit exacte paden, patronen met wildcards of exacte mapnamen. De opdracht verwijdert alleen de paden die momenteel naar de Git-repository gecommit zijn.

Het globben van bestanden met wildcards komt overeen in alle mappen. Het is belangrijk om voorzichtig te zijn met het gebruik van wildcards. Bekijk de voorbeelden: directory/* en directory*. In het eerste voorbeeld worden alle subbestanden van directory/ verwijderd, terwijl in het tweede voorbeeld alle naastgelegen mappen worden verwijderd, zoals directory1 directory2 directory_whatever, wat een onverwacht resultaat kan hebben.

De scope van git rm


De opdracht git rm werkt alleen op de huidige branch. De verwijdering wordt alleen toegepast op de werkmap en de staging-indexbomen. Het verwijderen van het bestand wordt niet voortgezet in de geschiedenis van de repository totdat er een nieuwe commit is aangemaakt.

git rm gebruiken in plaats van rm


Een Git-repository herkent wanneer er een normale shell-opdracht rm is uitgevoerd op basis van een bestand dat wordt bijgehouden. Deze werkt de werkmap bij om de verwijdering weer te geven. De staging-index wordt niet bijgewerkt als de verwijdering plaatsvindt. Er moet een extra opdracht git add uitgevoerd worden op de verwijderde bestandspaden om de wijzigingen aan de staging-index toe te voegen. De opdracht git rm gedraagt zich als sneltoets in die zin dat het de werkmap en de staging-index bijwerkt wanneer de verwijdering plaatsvindt.

Voorbeelden


git rm Documentation/\*.txt

In dit voorbeeld wordt een bestandsglob met wildcard gebruikt om alle *.txt files te verwijderen die ondergeschikt zijn aan de map Documentation en alle submappen ervan.

Let op dat het sterretje * in dit voorbeeld door schuine strepen wordt afgescheiden. Dit is een beveiliging die voorkomt dat de shell de wildcard uitbreidt. De wildcard breidt vervolgens de padnamen uit van bestanden en submappen onder de map Documentation/.

git rm -f git-*.sh

In dit voorbeeld wordt de optie force gebruikt die gericht is op alle bestanden met de wildcard git-*.sh. ‌ De optie force verwijdert de doelbestanden expliciet uit zowel de werkmap als de staging-index.

Bestanden verwijderen die niet meer in het bestandssysteem zitten


Zoals hierboven vermeld werd in 'git rm gebruiken in plaats van rm', is git rm in feite een gemaksopdracht die de standaard shell rm en git add combineert om een bestand te verwijderen uit de werkmap en die verwijdering naar de staging-index promoot. Een repository kan onhandelbaar worden in het geval dat er meerdere bestanden zijn verwijderd met alleen de standaard shell-opdracht rm.

Als het de bedoeling is om alle expliciet verwijderde bestanden op te nemen als onderdeel van de volgende commit, voegt git commit -a alle verwijderingsgebeurtenissen aan de staging-index toe ter voorbereiding van de volgende commit.

Als het echter de bedoeling is om de bestanden die zijn verwijderd met de shell rm permanent te verwijderen, gebruik dan de volgende opdracht:

git diff --name-only --diff-filter=D -z | xargs -0 git rm --cached

Deze opdracht genereert een lijst van de verwijderde bestanden uit de werkmap en stuurt die lijst door naar git rm --cached, waardoor de staging-index wordt bijgewerkt.

Samenvatting van git rm


git rm is een opdracht die op twee van de belangrijkste structuren voor intern statusbeheer van Git werkt: de werkmap en de staging-index. git rm wordt gebruikt om een bestand te verwijderen uit een Git-repository. Het is een gemaksmethode die het effect van de standaard shellopdracht rm combineert met git add. Dit betekent dat er eerst een doel uit het bestandssysteem wordt verwijderd en dat die verwijderingsgebeurtenis vervolgens aan de staging-index wordt toegevoegd. De opdracht is een van de velen die kunnen worden gebruikt om wijzigingen in Git ongedaan te maken.


Deel dit artikel
Volgend onderwerp

Aanbevolen artikelen

Bookmark deze resources voor meer informatie over soorten DevOps-teams of voor voortdurende updates over DevOps bij Atlassian.

Mensen die samenwerken met een muur vol tools

Bitbucket-blog

Toelichting DevOps

DevOps-leertraject

Demo Den Feature-demo's met Atlassian-experts

Hoe Bitbucket Cloud werkt met Atlassian Open DevOps

Meld je aan voor onze DevOps-nieuwsbrief

Thank you for signing up