Remove files from git repository without removing local files
Overview
Running git rm <file>
without the --cached
option will delete files from a git
repository and the local file system. To remove files from a git
repository only, use the --cached
command line argument.
Locate and remove a single file
Locate files to remove:
git ls-files
Output:
jemurray@jasons-mbp:~/Documents/www-personal/current/jasonmurray.org $ git ls-files
...
content/.DS_Store
...
Remove single file from the git
repository without removing local file:
git rm --dry-run --cached content/.DS_Store
Output:
jemurray@jasons-mbp:~/Documents/www-personal/current/jasonmurray.org $ git rm --dry-run --cached content/.DS_Store
rm 'content/.DS_Store'
Confirm the local file still exists:
jemurray@jasons-mbp:~/Documents/www-personal/current/jasonmurray.org $ ls -ald .DS_Store
-rw-r--r--@ 1 jemurray staff 10244 Jan 31 15:57 .DS_Store
Remove files from .gitignore file
Files and directories included in the .gitignore
will be excluded from tracking in a git
repository. But what if .gitignore
was created after the files were added? The following command will look at the contents of .gitignore
and automatically remove matching files from the .git
repository, not the local file system. Note: the --dry-run
command line argument confirms the actions without removing any files, remove after validation:
git rm --dry-run --cached `git ls-files -i -X .gitignore`
Output:
jemurray@jasons-mbp:~/Documents/www-personal/current/jasonmurray.org $ git rm --dry-run --cached `git ls-files -i -X .gitignore`
rm 'content/.DS_Store'
rm 'content/posts/loap/loapgeneration.md'
rm 'content/posts/loap/loapintroduction.md'
rm 'static/.DS_Store'