Skip to content

How to remove ignored files from git repository

Reading Mode

I ran into a situation today, whereby I had created a git repository for a new dotnet application I am developing, then started committing to the repository. It was only during the review of the commit had I realised I needed to include a few more file extensions to exclude a number of extraneous files from the repository in the .gitignore file.

There were a whole host of files that I need to configure git to ignore, but unfortunately these files were already been committed to the local staging area of my git repository and had already been synced to my GitHub repository. I needed to be able to remove ignored files from git repository.

I updated my .gitignore file with all the additional rules for the files and extensions I needed to exclude, as below. However, what I needed to do was to also remove the files I didn't want to to be included. The .gitignore would only ensure these files and extensions would be excluded in future commits but unfortunately the files had already been committed to the repository.

## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.

# User-specific files
*.suo
*.user
*.sln.docstates

# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
build/
bld/
[Bb]in/
[Oo]bj/

# Roslyn cache directories
*.ide/

# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*

#NUNIT
*.VisualState.xml
TestResult.xml

# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c

*_i.c
*_p.c
*_i.h
*.ilk
*.meta
*.obj
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc

# Chutzpah Test files
_Chutzpah*

# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opensdf
*.sdf
*.cachefile

# Visual Studio profiler
*.psess
*.vsp
*.vspx

# TFS 2012 Local Workspace
$tf/

# Guidance Automation Toolkit
*.gpState

# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user

# JustCode is a .NET coding addin-in
.JustCode

# TeamCity is a build add-in
_TeamCity*

# DotCover is a Code Coverage Tool
*.dotCover

# NCrunch
_NCrunch_*
.*crunch*.local.xml

# MightyMoose
*.mm.*
AutoTest.Net/

# Web workbench (sass)
.sass-cache/

# Installshield output folder
[Ee]xpress/

# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html

# Click-Once directory
publish/

# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# TODO: Comment the next line if you want to checkin your web deploy settings 
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj

# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/packages/*
# except build/, which is used as an MSBuild target.
!**/packages/build/
# If using the old MSBuild-Integrated Package Restore, uncomment this:
#!**/packages/repositories.config

# Windows Azure Build Output
csx/
*.build.csdef

# Windows Store app package directory
AppPackages/

# Others
sql/
*.Cache
ClientBin/
[Ss]tyle[Cc]op.*
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.pfx
*.publishsettings
node_modules/

# RIA/Silverlight projects
Generated_Code/

# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm

# SQL Server files
*.mdf
*.ldf

# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings

# Microsoft Fakes
FakesAssemblies/
/packages

How to remove existing files from the repository

In understanding the git promotion model we explored working directory, staging and the local repository and how they make up your typical git environment on your machine and how the Git Promotion model is a way of thinking about the different layers of Git and how content is moved between them.

The Git cache, also called the staging area or index, contains the working tree directory, including the repository, commits, and branches that would be committed the instance you call the commit command at any point in time.

The cache helps you make selected changes to the working tree before committing them or only download the most recent commits while caching most others.

Without the Git cache, the Git commit would inconveniently revert commit changes to the working tree before committing some of the commit changes in the next commit.

How to clear your git cache

There are a number of different ways to remove any existing files that have been erroneously committed to your Git repository. All the steps require you to clear your git cache.

How to remove individual files from git cache

To remove a specific file from the Git cache, use the git rm command followed by the specific file.

git rm --cached <filename>

For example if I wanted to delete a specific C# file from the staging area, in this case the filename is Program.cs I could execute the command as below within our working directory.

git rm --cached Program.cs

We verify that we have successfully removed the file by checking the index of the staging directory to see if it contains our file

file .git/index

You can use this same command to provide a list of filenames

How to clear entire directory

We can make use of a switch on available on the rm command to recursively iterate through all the files in a given directory on remove them. We can also use a Linux short cut of . to indicate the current directory

git rm -r --cached . 

So in order to clear the cache then add the files again, in order to apply the rules in my gitignore all I needed to do in my case was execute the following commands using the Git Bash :

git rm -r --cached . 
git add .
git commit -am "Remove ignored files and resubmitting files"

Once this was complete I had to then re-synchronize with the Github repository.

Conclusion

In order to clear your staging area in order to re-add your files all you need to do is the the git rm --cached command

Gary Woodfine
Latest posts by Gary Woodfine (see all)
Tags: